任意進制之間的轉換


原創:  

  之前有發一篇進制轉換的文章,轉換思想在里面,這里不再重復,詳情請查看:http://www.cnblogs.com/numen-fan/p/6495009.html

  

題目描述:
    求任意兩個不同進制非負整數的轉換(2進制~16進制),所給整數在long所能表達的范圍之內。
    不同進制的表示符號為(01,...,9,a,b,...,f)或者(01,...,9,A,B,...,F)。
輸入:
    輸入只有一行,包含三個整數a,n,b。a表示其后的n 是a進制整數,b表示欲將a進制整數n轉換成b進制整數。a,b是十進制整數,2 =< a,b <= 16。
    數據可能存在包含前導零的情況。
輸出:
    可能有多組測試數據,對於每組數據,輸出包含一行,該行有一個整數為轉換后的b進制數。輸出時字母符號全部用大寫表示,即(01,...,9,A,B,...,F)。
樣例輸入:
15 Aab3 7
樣例輸出:
210306
提示:
可以用字符串表示不同進制的整數。

代碼:

//任何進制的轉換

void test3(){

    //輸入格式,a,n,b;將a進制的n轉為b;

    int a,b;

    char str[40];//保存n

    while (scanf("%d%s%d",&a,str,&b)!=EOF) {

        int tmp = 0,lenth = strlen(str),c=1;//tmp表示將a進制數n轉為10進制,len為字符串n的長度,c為權重默認為1,最低位嘛,待會轉10進制時使用

        for (int i = lenth-1; i>=0; i--) {

            int x;

            if (str[i]>='0'&&str[i]<='9') {

                x = str[i]-'0';

            }else if(str[i]>='a'&&str[i]<='z'){

                x = str[i]-'a'+10;

            }else if(str[i]>='A'&&str[i]>='Z'){

                x = str[i]-'A'+10;

            }

            tmp+=x*c;//轉為10進制,乘權重

            c*=a;//增加權重;

        }

        char ans[40],size = 0;

        do{

            int x = tmp%b;//將10進制轉為b進制

            ans[size++] = x<10?x+'0':x-10+'A';//進行結果的裝填

            tmp/=b;

        }while(tmp);

//        puts(ans);這里不能這樣用,因為ans為正確順序的倒着的

        for(int i = size-1;i>=0;i--){

            printf("%c",ans[i]);

        }

        printf("\n");

    }

}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM