c语言编程 两个不同数字属于不同进制,计算出当它们分别处于何种进制时,两个数字相等 正确的回答追加财富

给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。

程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 2~36 之间。对于十以下的数字,用 0~9 表示,而十以上的数字,则使用大写的 A~Z 表示。

求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。信息的格式见测试用例。

测试输入 期待的输出 时间限制 内存限制 额外进程
测试用例 1 以文本方式显示
1.12 5↵
以文本方式显示
1.12 (base 3) = 5 (base 6)↵
1秒 64M 0
测试用例 2 以文本方式显示
1.123 456↵
以文本方式显示
1.123 is not equal to 456 in any base 2..36↵
1秒 64M 0
测试用例 3 以文本方式显示
1.10 A↵
以文本方式显示
1.10 (base 10) = A (base 11)↵
1秒 64M 0
测试用例 4 以文本方式显示
1.12 456↵
以文本方式显示
1.12 is not equal to 456 in any base 2..36↵
1秒 64M 0

#include <stdio.h>
#include <string.h>
#include <math.h>
int zhi(char c)
{
if ( c >= 'A' )
return c-'A'+10;
else
return c-'0';
}
int minjinzhi(char *s)
{
int max,cur;
max = 0;
while ( *s ) {
cur = zhi(*s);
if ( cur > max )
max = cur;
s++;
}
return max+1;
}
int main()
{
char a[1000],b[1000],*pa,*pb;
double na,nb;
int ja,jb,ra,rb;
int i,j,la,lb,find=0;
scanf("%s%s",a,b);
na = nb = 0;
la = strlen(a);
lb = strlen(b);
for ( ja = minjinzhi(a) ;find == 0 && ja <= 36 ; ja++ ) {
na = 0;
for ( i = 0 ; i < la ; i++ )
na += zhi(a[i]) * pow((float)ja,la-i-1);

for ( jb = minjinzhi(b) ;find == 0 && jb <= 36 ; jb++ ) {
for (nb = 0 , i = 0 ; i < lb ; i++ )
nb += zhi(b[i]) * pow((float)jb,lb-i-1);
if ( na == nb ) {
find = 1;
ra = ja;
rb = jb;
}
}
}
if ( find == 1 )
printf("%s (base %d) = %s (base %d)\n",a,ra,b,rb);
else
printf("%s is not equal to %s in any base 2..36\n",a,b);

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-17
我也想求答案- -
相似回答