描述
对于普通的异或,其实是二进制的无进位的加法
这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。
下图展示了3 ^ 5 和 4 ^^ 5的计算过程
输入
第一行有一个正整数T, 表示下面共有T组测试数据。
接下来T行,每行有一组测试数据,是由空格隔开的三个部分组成:
A B C
A和C是两个十进制整数,B是一个字符串,由n个^组成
1 <= T <= 100, 0<=A,B<2^30, 1<=n<=1000
输出
每个测试数据输出一行,包含一个数字,即该数据的结果,用十进制表示。
样例输入
2
3 ^ 5
4 ^^ 5
样例输出
6
6
代码
#include<iostream> #include<stdio.h> #include<string.h> #include<math.h> #include <memory.h> using namespace std; int a[1000]; int c[1000]; int trans(int * A,int num,int n) { int i=0; while(num) { A[i++]=num%n; num/=n; } return i; } int main() { int A,C; char B[1005]; int T; int i,j; int n; int n1,n2; int res=0; scanf("%d",&T); for(i=0;i<T;++i) { res=0; memset(a,0,sizeof(a)); memset(c,0,sizeof(c)); scanf("%d%s%d",&A,&B,&C); n=strlen(B); n1=trans(a,A,n+1); n2=trans(c,C,n+1); n1=n1>n2?n1:n2; for(j=0;j<n1;++j) { res+=(a[j]+c[j])%(n+1)*pow(1.0*(n+1),j); } printf("%d\n",res); } return 0; }
|
阅读(711) | 评论(0) | 转发(0) |