文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>有道难题-另类的异或

有道难题-另类的异或

时间:2010-05-30  来源:华南理工大学

 

描述

对于普通的异或,其实是二进制的无进位的加法
这里我们定义一种另类的异或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;
}


相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载