描述对于普通的异或,其实是二进制的无进位的加法这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。下图展示了3 ^ 5 和 4 ^^ 5的计算过程
0 1 1 (3)
^ 1 0 1 (5)
-----------------
1 1 0 (6)
0 1 1 (4)
^^ 0 1 2 (5)
-----------------------
0 2 0 (6)
输入第一行有一个正整数T, 表示下面共有T组测试数据。接下来T行,每行有一组测试数据,是由空格隔开的三个部分组成:A B CA和C是两个十进制整数,B是一个字符串,由n个^组成1 <= T <= 100, 0<=A,B<2^30, 1<=n<=1000输出
每个测试数据输出一行,包含一个数字,即该数据的结果,用十进制表示。
解题思路:此题需要进行进制转换,首先是获取进制,转换成对应进制后进行相加,最后再转换为十进制。
#include<iostream>
#include<cstdio>
#include <cstring>
#include<cmath>
using namespace std;
int main()
{
int number,t;
int a,b;
int i;
int length;
char c[1009];
int temp1[2000],temp2[2000];
int up1,up2;
int min,max;
int sum[2000];
int flag1,flag2;
double result;
int k,temp;
cin>>number;
for(t=1;t<=number;t++)
{
flag1=0;flag2=0;
result=0;
scanf("%d",&a);
scanf("%s",&c);
scanf("%d",&b);
length=strlen(c)+1;
temp1[0]=0;
temp2[0]=0;
up1=0;up2=0;
while(a!=0)
{
temp1[up1]=a%length;
up1++;
a=a/length;
}
while(b!=0)
{
temp2[up2]=b%length;
up2++;
b=b/length;
}
if(up1<up2)
{
for(i=up1;i<=up2;i++)
temp1[i]=0;
max=up2;
}
else
{
for(i=up2;i<=up1;i++)
temp2[i]=0;
max=up1;
}
for(i=0;i<max;i++)
{
sum[i]=(temp1[i]+temp2[i])%length;
}
for(i=0;i<max;i++)
{
result+=sum[i]*pow(double(length),double(i));
}
printf("%.0lf\n",result);
}
return 0;
}