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<cstdio> 2 #include<cstring> 3 #include<cmath> 4 using namespace std; 5 char n[1000]; 6 int main() 7 { 8 int a,b,s=0,ans=0,z,k=0,r=0,sp[1000]; 9 scanf("%d %s %d",&a,n,&b); 10 if(n[0]==‘0‘) 11 { 12 printf("0"); 13 return 0; 14 } 15 int x=strlen(n); 16 for(int i=x-1,k=0;i>=0;i--,k++) 17 { 18 if(n[i]>=‘A‘&&n[i]<=‘Z‘) 19 { 20 z=pow(a,k); 21 s=(n[i]-65+10)*z; 22 } 23 else if(n[i]>=‘a‘&&n[i]<=‘z‘) 24 { 25 z=pow(a,k); 26 s=(n[i]-97+10)*z; 27 } 28 else 29 { 30 z=pow(a,k); 31 s=(n[i]-‘0‘)*z; 32 } 33 ans+=s; 34 } 35 while(ans>0) 36 { 37 sp[r++]=ans%b; 38 ans/=b; 39 } 40 for(int i=r-1;i>=0;i--) 41 { 42 sp[i]>=10?printf("%c",sp[i]-10+‘A‘):printf("%d",sp[i]); 43 } 44 return 0; 45 }
时间: 2024-10-12 11:10:13