一、题目
输入两个非负 10 进制整数 A 和 B ( ≤ 2 30 − 1 ) (≤2^{30} −1) (≤230−1),输出 A+B 的 D (1<D≤10)进制数。
输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。
输出格式:
输出 A+B 的 D 进制数。
输入样例1:
123 456 8
输出样例1:
3.2.1
输入样例2:
14.1.28 10.16.27
输出样例2:
1103
二、思路和注意事项
分析:
- 进制转换过程就是不断的除进制取模,并存储到数组中
- 部分正确的可能原因: 没有对sum=0进行特判
- 也可以用string或者vector等容器 来存储,最后reverse,即把所有的元素逆序。
三、AC代码
(1) 数组存储
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
int M, N, p;
int sum = 0, i = 0;
int ans[100] = {
0 };
cin >> M >> N >> p;
sum = M + N;
if(sum==0)
{
printf("0\n");
return 0;
}
while (sum != 0)
{
ans[i] = sum % p;
sum /= p;
i++;
}
for (int k = i-1; k >= 0; k--)
{
cout << ans[k];
}
}
(2)Vector容器
#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int convert(int k, int p);
int main()
{
vector<int>ans;
vector<int>::iterator it;
int M, N, p, sum = 0;
cin >> M >> N >> p;
sum = M + N;
if (sum == 0) //特判
{
cout << "0" << endl;
}
else
{
while (sum != 0)
{
ans.push_back(sum % p);
sum /= p;
}
reverse(ans.begin(), ans.end()); //最后逆序输出
for (it = ans.begin(); it != ans.end();++it)
{
cout << *it;
}
}
}
(3)stirng去存储进制数
#include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
using namespace std;
int convert(int k, int p);
int main()
{
int M, N, p, sum = 0;
cin >> M >> N >> p;
sum = M + N;
if (sum == 0)
{
cout << "0" << endl;
return 0;
}
else
{
string str ="";
while (sum != 0)
{
to_string(sum % p);
str=str+ to_string(sum % p);;
sum /= p;
}
reverse(str.begin(), str.end());
cout << str << endl;
}
}
以上三种均可。