PAT 1001 A+B Format (20 分)

本文介绍了一道简单的PAT算法题,使用C++完成两个整数的加法运算,并将结果每三位数字用逗号分隔。通过两种不同的方法实现了这一功能,一种是从右向左遍历,另一种是从左向右遍历。

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

写在前面

最近闲的无事,于是玩玩PAT,玩玩算法,然后现在一直在搞java,所以想先搞搞C++,之前有一些C的基础,C++也只是了解过一下,哈哈,边玩边学吧。

题目简介

这道题是最开始的第一题,然后题目也很简单,分两点:

  • 输入a,b两个整数 ,然后两个数的范围是−10​6≤ a,b ≤10​6,所以这里不需要考虑变量的长度范围。
  • 然后输出结构的时候每隔3个数字用逗号分隔。
主要思路
  • 计算出a+b的值
  • 用to_string函数将整数转成字符串,然后进行字符串处理,这里我的思路是如果是"-“字符的话就不进行后面的判断,否则就判断当前的数字是第几个数字(从右边开始数),如果模3余1并且个数大于3的话,就在该字符后面加个”,"符号。
我的代码
#include <iostream>
using namespace std;

int main() {
    int a,b;
    cin >> a >> b;
    string s = to_string(a + b);
    int length = s.length();
    for(int i = 0 ;i < length ;i ++){
        cout << s[i];
        if(s[i] == '-') continue;
        //如果当前的数字的位置模3 == 1 并且 当前位置大于3的话
        if( (length -i ) % 3 == 1 && length - i > 3) cout << ',';
    }
    return 0;
}

​​#### 其他思路
这里完成了之后去看了一下github上一个大佬的解法 —>传送门
感觉到很新颖,这里分享一下,首先第一部都是计算两数之和,重要的是用逗号分隔的思路。

#include <iostream>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b;
    string s = to_string(a + b);
    int len = s.length();
    for (int i = 0; i < len; i++) {
        cout << s[i];
        if (s[i] == '-') continue;
        //看这里!!!!!!!!!!!!!!!!
        if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";
    }
    return 0;
}

这里的思路给我耳目一新的感觉,不过和我的算是一样,只不过我的是从右边开始,他的是从左边开始,思路是:

  • 首先也是先看这是第几个数字,如果当前数字的位置刚好等于总数字个数模3余下的个数的话,就加分隔符。
  • 还有一个需要满足的是,当前的个数不能小于4,这里用" i != len -1 "限制,因为当len < 4的时候,这个条件就不满足了,如果不理解可以在纸上枚举一下就知道了。
最后

有什么问题可以在评论区一起探讨。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值