提交地址:http://poj.youdao.com/practice/G/

描述

对于普通的异或,其实是二进制的无进位的加法

这里我们定义一种另类的异或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 <string>
#include <math.h>
#include <string.h>
#include <fstream>
using namespace std;

int num[100], num2[100], re[100];
int r1, r2, x, i, temp, maxlen;
int result;

void process() {
    i = 0;
    while ((int) (r1 / x) > 0) {
        num[i++] = r1 % x;
        r1 = r1 / x;
    }
    num[i] = r1;
    maxlen = i;
    i = 0;
    while ((int) (r2 / x) > 0) {
        num2[i++] = r2 % x;
        r2 = r2 / x;
    }
    num2[i] = r2;
    maxlen = maxlen > i ? maxlen : i;
    i = 0;
    result = 0;
    for (temp = maxlen; temp >= 0; temp--) {
        // cout << num[temp]<<"+"<< num2[temp]<<endl;
        re[i] = (num[temp] + num2[temp]) % x;
        result += re[i]*(pow(x, temp));
        //cout<<re[i]<<",";
        i++;
    }
    cout << result << endl;
}

void init() {
    memset(num, 0, sizeof (num));
    memset(num2, 0, sizeof (num2));
    memset(re, 0, sizeof (re));
    result = 0;

}

int main() {
    //ifstream cin("test.in");
    int N;
    cin >> N;
    while (N--) {
        init();
        cin >> r1;
        string op;
        cin >> op;
        int length = op.length();
        cin >> r2;

        x = ++length;
        process();

    }

}

提交地址:

1 Star2 Stars3 Stars4 Stars5 Stars (36 votes, average: 5.00 out of 5)
Loading ... Loading ...

标签:,

2 Responses


  1. yuwenting on 13 十二 2010

    原来那个符号是异或呀。。。。

  2. 挥着翅膀的鳖 on 13 十二 2010

    。。。是异或啊。。。


Leave your comment