设有一个字符串A$的结构为: A$=’m(n)p’ 其中m为数字串(长度<=20),而n,p均为1或2位的数字串(其中所表达的内容在2-10之间)。 程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n进制),以p进制的形式输出。 例如:A$=’48(10)8’ 其意义为:将10进制数48,转换成8进制数输出。 输出结果为:48(10)=60(8)
输入包含多组测试数据 一个字符串A,中间以一个(n)隔开,(n)之前是一个整数m,n表示n进制,(n)之后是一个整数p,表示要将n转换成p进制 每个字符串占一行
输出每个输出占一行 按以下格式输出 m(n)=q(p) 表示n进制的m和p进制的q相等
样例输入48(10)8
样例输出48(10)=60(8)
解题思路:
先把每一位抽取出来,然后按照进制进行还原,反正最后都是按照十进制来做。接下来再按照新的进纸进行位抽取即可。
#include <stdio.h>
#include <math.h>
main()
{
long long m;
int n,p;
long long result;
int a[200];
int up;
int i;
long long t;
long long xx;
while (scanf("%lld(%d)%d",&m,&n,&p)!=EOF)
{t=m;
up=0;
while(m!=0)
{
a[up]=m%10;
up++;
m=m/10;
}
result=0;
xx = 1;
for(i=0;i<up;i++)
{
result=result+xx*a[i];
xx =xx * n;
}
up=0;
while(result!=0)
{
a[up]=result%p;
up++;
result=result/p;
}
result=0;
xx = 1;
for(i=0;i<up;i++)
{
result=result + xx*a[i];
xx = xx * 10;
}
printf("%lld(%d)=%lld(%d)\n",t,n,result,p);
}
}