Chinaunix首页 | 论坛 | 博客
  • 博客访问: 350657
  • 博文数量: 122
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1191
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 11:12
文章分类

全部博文(122)

文章存档

2010年(122)

我的朋友

分类: C/C++

2010-05-30 12:54:18

 

描述

对于普通的异或,其实是二进制的无进位的加法
这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n^,那么A op B表示AB之间进行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) |
给主人留下些什么吧!~~