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留一位!!!
#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);}}