Begin2 - Unit1 - 另类的异或
描述 Description
对于普通的异或,其实是二进制的无进位的加法
这里我们定义一种另类的异或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)
输入格式 Input Format
第一行有一个正整数T, 表示下面共有T组测试数据。
接下来T行,每行有一组测试数据,是由空格隔开的三个部分组成:
A B C
A和C是两个十进制整数,B是一个字符串,由n个^组成
1 <= T <= 100, 0<=A,B<2^30, 1<=n<=1000
输出格式 Output Format
每个测试数据输出一行,包含一个数字,即该数据的结果,用十进制表示。
样例输入 Sample Input
2
3 ^ 5
4 ^^ 5
样例输出 Sample Output
6
6
时间限制 Time Limitation
各个测试点1s
下面附上我的代码:只过了1个点,不知为何。。。。
#include
#include
#include
char c[1001];
unsigned long a,b,sum;
int t,i,cs=0,j;
int comp(int m1,int n1)//相信这个谁都能看懂
{
if(m1>n1) return(m1);
else return(n1);
}
unsigned long major(unsigned long a1,int c1,unsigned long b1)//主要程序
{
int max,m=0,n=0,sum1[31]={0},ac[31]={0},bc[31]={0},k;
unsigned long ssum=0;
while(a1!=0)//将a转化为n+1进制的数,存到数组ac[]里
{ac[m]=a1%c1;
a1/=c1;
m++;//位数m
}
while(b1!=0)//将b转化为n+1进制的数,存到数组bc[]里
{bc[n]=b1%c1;
b1/=c1;
n++;//位数n
}
max=comp(m,n);//得到m,n里较大的那个
for(k=0;k
for(k=0;k
return(ssum);//返回其值
}
main()
{
scanf("%d\n",&t);//读入几行
for(i=0;i
for(j=0;j<1000;j++)//数^的个数,结果存到cs里
if(c[j]=='^') cs++;//简单计数
sum=major(a,cs+1,b);//进入主要程序,cs+1意为n+1进制
printf("%u\n",sum);//输出结果
cs=0;//重置^的个数
}
system("pause");
}
#include
#include
char c[1001];
unsigned long a,b;
int t,i,cs=0,j;
unsigned long major(unsigned long a1,int c1,unsigned long b1
{
int m=0,n=0,ac[31]={0},bc[31]={0},k;
unsigned long ssum=0;
while(a1!=0)//将a转化为n+1进制的数,存到数组ac[]里
{ac[m]=a1%c1;
a1/=c1;
m++;//位数m
}
while(b1!=0)//将b转化为n+1进制的数,存到数组bc[]里
{bc[n]=b1%c1;
b1/=c1;
n++;//位数n
}
for(k=0;k<((m>n)?m:n);k++)//无进位加法并进行进制回转
ssum+=((ac[k]+bc[k])%c1)*pow(c1,k);
return(ssum);//返回其值
}
main()
{
scanf("%d\n",&t);//读入几行
for(i=0;i
for(j=0;j<1000;j++)//数^的个数,结果存到cs里
if(c[j]=='^') cs++;
printf("%u\n",major(a,cs+1,b));//cs+1意为n+1进制
cs=0;//重置^的个数
}
}
更改后代码 还是不行