Description | ||||||
请计算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 | ||||||
Source | ||||||
ericxie | ||||||
不会的肯定是不知道怎么转其他进制为十进制,看下我写的change函数,自己悟下应该就懂了,还有不会的就在评论区问就行了,看到就会回你。
#include<stdio.h>
#include<string.h>
#include<math.h>
int change(int n,char str[])
{
int sum = 0;
int f = 1;
int i = 0;
if (str[0] == '-') {
f = -1;
i = 1;
}
for (; i < strlen(str); i++)
{
int a;
if (str[i] >= '0' && str[i] <= '9')
{
a = str[i] - '0';
}
else if (str[i] >= 'A' && str[i] <= 'Z')
{
a = 10 + str[i] - 'A';
}
else
{
a = 36 + str[i] - 'a';
}
sum = sum * n + a;
}
return sum * f;
}
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
int n,m,x,y;
int sum=0;
char a[1000] = { 0 };
char b[1000] = { 0 };
scanf("%s%d%s%d", a, &n, b, &m);
x=change(n,a);
y=change(m,b);
sum=x+y;
printf("%d\n",sum);
}
return 0;
}