有一个隐藏用例无法通过QAQ
这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。
程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 236 之间。对于十以下的数字,用 09 表示,而十以上的数字,则使用大写的 A~Z 表示。
求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。
测试用例 1
12 5↵
输出
12 (base 3) = 5 (base 6)↵
测试用例 2
123 456↵
输出
123 is not equal to 456 in any base 2..36↵
测试用例 3
10 A↵
输出
10 (base 10) = A (base 11)↵
测试用例 4
12 456↵
输出
12 is not equal to 456 in any base 2..36↵
#include <stdio.h>
#include <string.h>
char change(char);
//有一个隐藏案例没过
int main()
{ char aa[11], bb[11];
int a[11], b[11];
int len_a, len_b, max_a=0, max_b=0, sum_a, sum_b;
int i, k, flag=1, t;
scanf("%s", aa);
scanf("%s", bb);
//求长度
len_a=strlen(aa);
len_b=strlen(bb);
//转换
for (i=0; i<len_a; i++)
a[i]=change(aa[i]);
for (i=0; i<len_b; i++)
b[i]=change(bb[i]);
//求最大进制
for (i=0; i<len_a; i++)
if (a[i]>max_a) max_a=a[i]+1;
for (i=0; i<len_b; i++)
if (b[i]>max_b) max_b=b[i]+1;
//比较
for (i=max_a; i<=36&&flag; i++)
{ flag=1;
sum_a=0;
for (k=0; k<len_a; k++)
sum_a=sum_a*i+a[k];
for (k=max_b; k<=36 && flag; k++)
{ sum_b=0;
for (t=0; t<len_b; t++)
sum_b=sum_b*k+b[t];
if (sum_a==sum_b)
flag=0;
}
}
if (flag)
printf("%s is not equal to %s in any base 2..36\n", aa, bb);
else
printf("%s (base %d) = %s (base %d)\n",aa, i-1, bb, k-1);
return 0;
}
char change(char a)
{ if ('A'<=a && a<='Z')
a=a-'A'+10;
else if ('0'<=a && a<='9')
a=a-'0';
return a;
}
真的想不出来了QAQ,可以帮我看一下吗