## JOJ 1006解题

2018年02月01日 ⁄ 综合 ⁄ 共 1723字 ⁄ 字号 评论关闭

Result TIME Limit MEMORY Limit Run Times AC Times JUDGE
3s 8192K 6195 2080 Standard

Given a base, and two positive integers in decimal (base 10), convert the two numbers to the new base, add them, and display their sum in the new base.

### Input

Three positive integers denoting the base and the two numbers, respectively. Input numbers will be integers between 0 and 65535. Bases will be between 2 and 10 inclusive. Each case will be on a separate line. The end of input will be denoted by three zeros.

### Output

An equation for the sum of the two numbers, in the new base.

### Example

In this example, we add 10 and 3 in base 2, and we add 15 and 4 in base 3.

In base 2, 10 = 8 + 2 = 1*23 + 0*22 + 1*21 + 0*20 and 3 = 2 + 1 = 1*21 + 1*20, so their base 2 equivalents are 1010 and 11, respectively. 10 + 3 = 13 = 1*23+1*22+0*21+1*20,
so the base 2 equivalent of 13 is 1101.

In base 3, 15 = 9 + 6 = 1*32+2*31+0*30 and 4 = 3 + 1 = 1*31 + 1*30, so their base 2 equivalents are 120 and 11, respectively. 15 + 4 = 19 = 2*32 + 0*31 + 1*30, so the
base 3 equivalent of 19 is 201.

### Input

```2 10 3
3 15 4
0 0 0
```

### Output

```1010 + 11 = 1101
120 + 11 = 201
```

```#include <iostream>
#include <stack>
#include <queue>
#include <vector>
using namespace std;

typedef struct{
int a ;
int b ;
int c ;
}inputNum;

void converse(int base, int num, stack<char> *result)
{
int a = num;
int b = base;
while (a != 0)
{
result->push(a%b + '0');
a = a/b;
}
}

int main ()
{
queue<inputNum> input;
int a,b,c;
while(cin>>a>>b>>c && !(a == 0 && b == 0 && c == 0))
{
inputNum temp;
temp.a = a;
temp.b = b;
temp.c = c;
input.push(temp);
}
while (!input.empty())
{
inputNum temp ;
temp = input.front();
input.pop();
stack<char> result;
converse(temp.a, temp.b, &result);
stack<char> result2;
converse(temp.a, temp.c, &result2);
stack<char> result3;
converse(temp.a, temp.b+temp.c , &result3);
while (!result.empty()) {
cout<<result.top();
result.pop();
}
cout << " + ";
while (!result2.empty()) {
cout<<result2.top();
result2.pop();
}

cout <<" = ";
while (!result3.empty()) {
cout<<result3.top();
result3.pop();
}
cout<<endl;

}

return 0;
}
```