【全网最细PAT题解】【PAT乙】1022 D进制的A+B(测试点3)

该程序接收两个不超过2^30-1的10进制整数A和B,计算它们的和,然后将结果转换为D(1<D≤10)进制。关键在于处理进位和进制转换,使用字符串存储结果并反转以得到正确的D进制表示。对于特殊情况A+B=0,直接输出0。

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

题目链接

1022 D进制的A+B

题目描述

输入两个非负 10 进制整数 A 和 B (≤2 
30
 −1),输出 A+B 的 D (1<D≤10)进制数。

输入格式:
输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:
输出 A+B 的 D 进制数。

输入样例:
123 456 8
输出样例:
1103

题目大意

给你两个数A B让你把A+B的结果转换为D进制数输出

解题思路

本题要注意的点比较多

  • 首先是a b的范围,为≤2^30−1,这也就说明a+b一定不会超出int的范围,当然读者也可以直接用long long,直接避免范围判断
  • 然后就是进制转换的问题,由十进制数n转化为d进制,只需要将n不断的除以d并将余数保存,得到的余数序列再翻转一下就是d进制数(如题目中最后得到的序列其实是3011,需要我们从后往前看1103才是最后的结果)
  • to_string函数的运用可以看【经验】关于c++11中string类型字符串和整形相互转化的用法
  • 关于测试点3,是要我们对A+B=0 这种特殊情况进行判断

题解

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    int d;
    int y;
    string s;
    cin>>a>>b>>d;
    a+=b;
    if(a==0){
        //测试点3 a+b=0
        cout<<"0";
        return 0;
        //这里return 0 代表直接结束代码运行,后面的代码就不会执行了
    }
    while(a!=0){
        s=s+to_string(a%d);
        //注意只能通过这种方式拼接string类型字符串,而不能拼接char类型字符
        //利用了拼接字符串的特性,两个字符串可以直接相加,to_string函数前面也是提到过
        a/=d;
    }
    reverse(s.begin(),s.end());
    //翻转序列
    cout<<s;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值