Description
在实际问题中经常遇到需要对不同的进制数进行转换,实现将P进制数转换成R进制数(2<=P,R<=16)
Input
数据包含多行,每行包含三个数据,分别为P,R和待转换的P进制数d(该数的十进制表示小于100000000),字母用大写表示,ABCDEF,当P为0时,结束输入。
Output
对应每行输入,只有一个输出,且每行只有一个数据
Sample Input
Sample Output
首先将P进制数d转换成十进制,然后再转换成R进制数。注意pow函数可能会产生的误差。
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- int p,r,i,n;
- char d[10];
- while(1)
- {
- scanf("%d %d %s",&p,&r,d);
- if(p==0) break;
- n=strlen(d);
- for(i=0;i<n;i++)
- {
- if(d[i]<='9')
- d[i]-='0';
- else
- d[i]=d[i]-'A'+10;
- }
- long sum=0;
- for(i=0;i<n;i++)
- sum=sum*p+d[i];
- aa(sum,r);
- printf("\n");
- }
- return 0;
- }
- void aa(unsigned int i ,int x)
- {int t;
- t=i%x;
- if(i/x>0)
- aa(i/x,x);
- if(t>=10)
- putchar(55+t);
- else
- printf("%d",t);
- return;
- }