数制转换 帮找错
我们通常使用的都是十进制的数字,但其实在生活中也经常会使用其它进制。这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。
程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 2~36 之间。对于十以下的数字,用 0~9 表示,而十以上的数字,则使用大写的 A~Z 表示。
求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。
12 5↵
以文本方式显示
1.12 (base 3) = 5 (base 6)↵
我编了一个 无法输出 求指点
#include"stdio.h"
#include"string.h"
int power(int x,int y)
{int s=1;
y=y-1;
while(y-->0)
{s*=x;
}
return s;
}
char* num(char*a )
{int i,j;
char*p;
while(*a++!='\0')
if(*a++>='A'&&*a++<='Z')
*p++=(*a++)-'A'+10;
else
*p++=*a++;
*p++='\0';
puts(p);
return p;
}
int deci(int x,char *a)
{int s=0,i=strlen(a);
char*p;
int n;
p=num(a);
while(*p++!='\0')
{n=power(x,i--);
s+=(*p++)*n;
}
return s;
}
int main()
{int i,j,n,flag=1;
int m;
char a[1000],b[1000];
gets(a);
gets(b);
for(i=2;i<=36;i++)
for(j=2;j<=36;j++)
{n=deci(i,a);
m=deci(j,b);
printf("%d",n);
if(m==n){printf("%s(base on %d)=%s(base on %d)\n",a,i,b,j);flag=0;break;}
}
if(flag==1) printf("no");
return 0;}