新手,求纠错,关于不同进制相加
请计算a+b,但a和b是按不同的进制给出的。进制最小为2进制,最大为62进制,其中使用A-Z依次表示10到35,a-z表示36-61。请写出a+b的结果,结果按十进制输出。 输入第一行是一个整数N,表示有多少个测试样例,以后每行是一个样例,每行是4个部分,分别为a的值,a的进制,b的值,b的进制。其中值都是用一个字符串表示,进制都是一个整数。4个部分之间用一个空格隔开,保证输入的合法,a、b和a+b的值都在-2^31到2^31-1之间。输出每行输出一个样例的结果。 Sample Input
2
1000 2 1F 16
-1 10 20 3
Sample Output
39
5
这是我写的:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
char a[1000];
char b[1000];
int m,n,al,bl,i,x=0,y=0,t;
scanf("%s %d %s %d",a,&m,b,&n);
al=strlen(a);
bl=strlen(b);
for(i=0;i<al;i++)
{
if(a[i]=='-')
continue;
if('A'<=a[i]&&a[i]<='Z')
t=a[i]-55;
else if('a'<=a[i]&&a[i]<='z')
t=a[i]-61;
else t=a[i]-'0';
x=x+(pow(m,(al-1-i))*t);
}
if(a[0]=='-')
x=-x;
for(i=0;i<bl;i++)
{
if(b[i]=='-')
continue;
if('A'<=b[i]&&b[i]<='Z')
t=b[i]-55;
else if('a'<=b[i]&&b[i]<='z')
t=b[i]-61;
else t=b[i]-'0';
y=y+(pow(n,(bl-1-i))*t);
}
if(b[0]=='-')
y=-y;
printf("%d\n",x+y);
}
}
样例通过了,
为何交上去不对