洛谷 P1604 B进制星球
1、题目(来源于洛谷网站):
题目背景
进制题目,而且还是个计算器~~
题目描述
话说有一天,小Z乘坐宇宙飞船,飞到一个美丽的星球。因为历史的原因,科技在这个美丽的星球上并不很发达,星球上人们普遍采用B(2<=B<=36)进制计数。星球上的人们用美味的食物招待了小Z,作为回报,小Z希望送一个能够完成B进制加法的计算器给他们。 现在小Z希望你可以帮助他,编写实现B进制加法的程序。
输入格式
共3行第1行:一个十进制的整数,表示进制B。第2-3行:每行一个B进制数正整数。数字的每一位属于{0,1,2,3,4,5,6,7,8,9,A,B……},每个数字长度<=2000位。
输出格式
一个B进制数,表示输入的两个数的和。
输入输出样例
输入:
4
123
321
输出:
1110
2、C++代码如下:
#include <iostream>
#include <vector>
using namespace std;
typedef vector<int> vi;
vi add(vi &A, vi &B, int m);
int main()
{
int m;
string a, b;
vi A, B;
char x;//定义字符x是为了最后能以字母形式输出
cin >> m >> a >> b;
for (int i = a.size()- 1; i >= 0; i -- )
{
if (a[i] >= '0' && a[i] <= '9') A.push_back(a[i] - '0');
else A.push_back(a[i] - 55);
}
for (int i = b.size()- 1; i >= 0; i -- )
{
if (b[i] >= '0' && b[i] <= '9') B.push_back(b[i] - '0');
else B.push_back(b[i] - 55);
}
vi C = add(A, B, m);
for (int i = C.size() - 1; i >= 0; i -- )
{
if (C[i] >= 0 && C[i] <= 9) cout << C[i];
else
{
x = C[i] - 10 + 'A';
cout << x;
}
}
return 0;
}
vi add(vi &A, vi &B, int m)
{
vi C;
int t = 0;
for (int i = 0; i < A.size() || i < B.size(); i ++ )
{
if (i < A.size()) t += A[i];
if (i < B.size()) t += B[i];
C.push_back(t % m);
t /= m;
}
if (t) C.push_back(1);
return C;
}
注意事项:
题中要求大于9的数要用大写字母表示,计算前需要将字母转换成数字(-55),输出前要将数字转换成字母(+55)。