`最开始拿到的ab是对的,经历了一段跟ab无关的代码ab就只剩垃圾值了
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(){
char a[20],b[20];
scanf("%s",a);
scanf("%s",b);
int i,l1,l2,j,flag=0,key=0,u=0;
int c[20],d[20],sum1[36],sum2[36];
l1=strlen(a);
l2=strlen(b);
a[l1]='\0';
b[l2]='\0';
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));
memset(sum1,0,sizeof(sum1));
memset(sum2,0,sizeof(sum2));
//将字符转化为数字之第一个数
for(i=0;i<l1;i++){
//字符为数字的情况
if(a[l1-i-1]>='0'&&a[l1-i-1]<='9'){
c[i]=a[l1-1-i]-'0';
}
//字符为字母的情况
if(a[l1-i-1]>='A'&&a[l1-i-1]<='Z'){
c[i]=a[l1-1-i]-55;
}
}//第二个数
for(i=0;i<l2;i++){
if(b[l2-i-1]>='0'&&b[l2-i-1]<='9'){
d[i]=b[l2-i-1]-'0';
}
if(b[l2-i-1]>='A'&&b[l2-i-1]<='Z'){
d[i]=b[l2-i-1]-55;
}
}
for(i=2;i<=36;i++){
for(j=0;j<l1;j++){
//当有超越进制的情况,跳出,下一轮循环
if(c[j]>=i){
flag++;
break;
}else{
//否则算出该数转化成十进制的结果
sum1[i]=sum1[i]+c[j]*pow(i,j);
}
}
}
for(i=2;i<=36;i++){
for(j=0;j<l2;j++){
if(d[j]>=i){
key++;
break;
}else{
sum2[i]=sum2[i]+d[j]*pow(i,j);
}
}
}
//比较是否有相同情况
for(i=2+flag;i<=36;i++){
for(j=2+key;j<=36;j++){
if(sum1[i]==sum2[j]){
printf("%s (base %d) = %s (base %d)\n",a,i,b,j);
return 0;
}
}
}
printf("%s is not equal to %s in any base 2..36",a,b);
return 0;
}