PAT练习题:D进制的A+B(C++)

本文介绍了一种将两个非负10进制整数相加后,转换为指定D进制数的算法实现。通过不断除以目标进制并保留余数,最终得到转换后的数值。代码使用C++编写,详细展示了如何进行进制转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数

思路:

计算一个数num中有多少个D(num/D),同时求num对D的余数,这个余数保存到结果中
将上次的num/D作为下一次循环的num,然后再求num/D和num%D
直到num/D小于D,再把最后这位数加入到结果中

比如1103(10进制)转到8进制

  1. num=1103,D=8
  2. num/D = 72 , num%D = 3(保存此项), num = 72
  3. num/D = 9 , num%D = 0(保存), num = 9
  4. num/D = 1 , num%D = 1(保存), num = 1
  5. num = 1 < D = 8 , 退出循环 ,将当前的num = 1保存到结果中
  6. 反向打印结果即为所求: 1103
#include<iostream>
using namespace std;

int main()
{
    int num1,num2,format=0;
    cin>>num1;
    cin>>num2;
    cin>>format;

    string result="";
    int num = num1 + num2;
    int times = num;//每次除以D后的商,也是下一次的num
    int left;//余数
    do
    {
        num = times;
        times = num / format;
        left = num % format;
        result += char(left+48);//保存结果为char型,便于打印
    }while(times >= format);
    if(times != 0)
        result += char(times+48);
    int len = result.length();
    for(int i=len-1;i>=0;--i)//反向打印结果,即为正确顺序
        cout<<result[i];
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值