题目描述:
求任意两个不同进制非负整数的转换(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
1 #include <iostream> 2 #include<string.h> 3 using namespace std; 4 5 int main() 6 { 7 int a,b; 8 char str[40]; 9 memset(str,0,sizeof(str)); 10 while(scanf("%d%s%d",&a,str,&b)!=EOF){ 11 int len=strlen(str); 12 int temp=0; 13 int c=1; 14 for(int i=len-1;i>=0;i--){//转换成十进制 15 int x; 16 if(str[i]<='9'&&str[i]>='0'){ 17 x=str[i]-'0'; 18 } 19 else if(str[i]>='a' && str[i]<='f'){ 20 x=str[i]-'a'+10; 21 } 22 else if(str[i]>='A' && str[i]<='F'){ 23 x=str[i]-'A'+10; 24 } 25 temp+=x*c;//累加该位数字和数位权重的积 26 c*=a;//计算下一位数位权重 27 } 28 char ans[40]; 29 memset(ans,0,sizeof(ans)); 30 int size=0; 31 while(temp){ 32 int x=temp%b;//计算该位数字 33 char x0; 34 if(x<10)//转换成字符 35 x0=x+'0'; 36 else 37 x0=x+'a'-10; 38 ans[size++]=x0; 39 temp/=b; 40 } 41 for(int i=size-1;i>=0;i--){ 42 printf("%c",ans[i]); 43 } 44 printf(" "); 45 } 46 return 0; 47 }
P.S.这个题实际上很简单,我做的一直报错的原因主要是因为很多初始化都没写。像里面的size,temp,c等都是应该初始化的,如果没有初始化是做不出来的。