[保研/考研机试] KY135 又一版 A+B 浙江大学复试上机题 C++实现

题目链接:

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

思路:

  1. 循环读入进制数 m。
  2. 如果 m 为 0,则退出循环。
  3. 读入两个十进制数 a 和 b。
  4. 计算 A+B 的结果,存放在 res 中。
  5. 如果结果 res 为 0,直接输出 0 并继续下一次循环。
  6. 初始化一个向量 nums,用于存放 m 进制表示的结果。
  7. 在循环中,对 res 反复进行取余操作,得到当前位的值,然后将该值添加到向量 nums 中,再将 res 除以 m,继续计算下一位。
  8. 遍历向量 nums,从高位到低位输出结果。
  9. 继续下一次循环,直到输入的进制数 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;
}

提交结果:

相关推荐
岑梓铭1 小时前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记
晴天的雨.9921 小时前
【C++】继承篇
java·开发语言·c++
青少儿编程课堂1 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
another heaven1 小时前
【C/C++ 第一次跨越(上):用 C++11/14 停止制造新的旧代码】
c语言·c++·制造
qq_406981031 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
在所不辞兄2 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus12 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Rabitebla13 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
码客-ygluu19 小时前
一个通用游戏数据服务器
c++·架构