题目链接:
KY135 又一版 A+B https://www.nowcoder.com/share/jump/437195121691736185698
描述
输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m <10)进制数。
输入描述:
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。 当m为0时输入结束。
输出描述:
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
示例1
输入:
cpp
8 1300 48
2 1 7
0
输出:
cpp
2504
1000
思路:
- 循环读入进制数
m
。 - 如果
m
为 0,则退出循环。 - 读入两个十进制数
a
和b
。 - 计算
A+B
的结果,存放在res
中。 - 如果结果
res
为 0,直接输出 0 并继续下一次循环。 - 初始化一个向量
nums
,用于存放m
进制表示的结果。 - 在循环中,对
res
反复进行取余操作,得到当前位的值,然后将该值添加到向量nums
中,再将res
除以m
,继续计算下一位。 - 遍历向量
nums
,从高位到低位输出结果。 - 继续下一次循环,直到输入的进制数
m
为 0 时结束。
注意:代码中使用了向量 nums
来存放结果的每一位,这样可以确保在输出时从高位到低位输出结果,同时也适用于任何进制的转换。
源代码:
cpp
#include<iostream>
#include<string>
#include<vector>
using namespace std;
// 习题6.2 又一版A+B
int main() {
int m, a, b;
long long res; // 用于存放A+B的结果
while (cin >> m) { // 循环读入进制数 m
if (m == 0) { // 如果 m 为 0,退出循环
break;
}
cin >> a >> b; // 读入两个十进制数 A 和 B
res = a + b; // 计算 A+B 的结果
if (res == 0) { // 如果结果为 0,直接输出 0 并继续下一次循环
cout << 0 << endl;
continue;
}
vector<int> nums; // 用于存放 m 进制表示的结果
while (res != 0) {
nums.push_back(res % m); // 求余数,得到当前位的值
res /= m; // 除以 m,继续计算下一位
}
for (int i = nums.size() - 1; i >= 0; i--) {
cout << nums[i]; // 从高位到低位输出结果
}
cout << endl;
}
return 0;
}