首页 > 代码库 > 01:数制转换

01:数制转换

01:数制转换

  • 查看
  • 提交
  • 统计
  • 提问
总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

求任意两个不同进制非负整数的转换(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)。
样例输入
15 Aab3 7
样例输出
210306
来源
2005~2006医学部计算概论期末考试
 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 char a[10001]; 7 int b[10001]; 8 int now; 9 int tot;10 int n;//未被转化的进制 11 int m;//需要转换的进制 12 int da[10001];13 char w[20]={A,B,C,D,E,F};14 int main()15 {16     cin>>n;17     scanf("%s",&a);18     19     cin>>m;20     int l=strlen(a);21     if(a[0]==0&&l==1)22     {23         cout<<"0";24         return 0;25     }26     for(int i=0;i<l;i++)27     {28         if(a[i]>=97&&a[i]<=122)29         {30             a[i]=a[i]-32;31         }32         if(a[i]>=49&&a[i]<=57)33         {34             b[i]=a[i]-48;35         }36         else if(a[i]>=65&&a[i]<=90)37         {38             b[i]=a[i]-55;39         }40     }41     int ans=0;42     int now=0;43     for(int i=l-1;i>=0;i--)44     {45         ans=ans+b[i]*(pow(n,now));46         now++;47     }48     int now2=1;49     while(ans!=0)50     {51         int r=ans%m;52         b[now2]=r;53         ans=ans/m;54         now2++;55     }56     for(int i=now2-1;i>=1;i--)57     {58         if(b[i]<10)59         cout<<b[i];60         else 61         {62             int k=b[i]-10;63             cout<<w[k];64         }65     }66     /*for(int i=now2;i>=0;i--)67     cout<<da[i];*/68     return 0;69 }

要注意考虑a是0的情况

01:数制转换