算法題----任意進制轉換


/*
求任意兩個不同進制非負整數的轉換(2進制~16進制),所給整數在long所能表達的范圍之內。
不同進制的表示符號為(0,1,…,9,a,b,…,f)或者(0,1,…,9,A,B,…,F)。

輸入
輸入只有一行,包含三個整數a,n,b。a表示其后的n 是a進制整數,b表示欲將a進制整數n轉換成b進制整數。a,b是十進制整數,2 =< a,b <= 16。

輸出
可能有多組測試數據,對於每組數據,輸出包含一行,該行有一個整數為轉換后的b進制數。輸出時字母符號全部用大寫表示,即(0,1,…,9,A,B,…,F)。

樣例輸入4 10 123
樣例輸出27
 */
#include <bits/stdc++.h>
#include <cstring>
using namespace std;

int toInt(char x)
{
    if(x >= '0' && x <= '9') return x - '0';
    else if( x >= 'a' && x <= 'z') return x - 'a' + 10;
    else return x - 'A' + 10;
}


char toChar(int x)
{
    if( x>=0 && x<=9) return '0' + x;
    else return 'A' + x - 10;
}

int main()
{
     int a, b;  // a為原進制 b要轉換的進制
     char s[50];

     while((scanf("%d%d%s", &a,&b,s)) != EOF)
//     scanf("%d%d%s", &a,&b,s);
     {
         int product = 1;  // 進制的冪
         int y = 0;  //存十進制,中間轉換
         for(int i = strlen(s) - 1; i>= 0; i--)
         {
             y += toInt(s[i]) * product;
             product = product * a;
         }

         char ans[100];
         int num = 0;

         do{
             ans[num++] = toChar(y % b);
             y = y / b;
         }while(y!=0);

         for(int i = strlen(ans) - 1; i >= 0; i--)
         {
             printf("%c", ans[i]);
         }
         printf("\n");
     }

     return 0;
}


免責聲明!

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



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