ZOJ-1334 进制变换
ZOJ-1334 进制转换
1334:给出源数 给出源数的基 和目标数的基 求目标数
目标数最长7位 右对齐显示
Sample Input
1111000 2 10
1111000 2 16
2102101 3 10
2102101 3 15
12312 4 2
1A 15 2
1234567 10 16
ABCD 16 15
Sample Output
120
78
1765
7CA
ERROR
11001
12D687
D071
思路:将源数转换成10进制,再转成目标进制
char res[8] 数组存字符串一定要记得给末尾\0留一位!!!
1334:给出源数 给出源数的基 和目标数的基 求目标数
目标数最长7位 右对齐显示
Sample Input
1111000 2 10
1111000 2 16
2102101 3 10
2102101 3 15
12312 4 2
1A 15 2
1234567 10 16
ABCD 16 15
Sample Output
120
78
1765
7CA
ERROR
11001
12D687
D071
思路:将源数转换成10进制,再转成目标进制
char res[8] 数组存字符串一定要记得给末尾\0留一位!!!
#include<iostream> #include<string> #include<math.h> #include<stdio.h> #include<memory.h> using namespace std; char ref[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; int count=0; char res[8]; void ten2n(int num,int base) { if(num/base!=0) ten2n(num/base,base); if(count<7) res[count++]=ref[num%base]; else if(count++==7) strcpy(res,"ERROR"); } int n2ten(char * num,int base) { int sum=0; int val; int len = strlen(num); for(int i=0;i<len;i++) { if(num[i]>='0'&&num[i]<='9') val=num[i]-'0'; else if(num[i]>='A'&&num[i]<='F') val=num[i]-'A'+10; sum+=val*pow((double)base,len-1-i); } return sum; } int main() { char src[100]; int ibase; int obase; while(cin>>src) { cin>>ibase; cin>>obase; count=0; memset(res,0,sizeof(char)*8); ten2n(n2ten(src,ibase),obase); memset(src,0,sizeof(char)*100); printf("%7s\n",res); } }