PAT甲级练习第一题

题目链接:

PTA | 程序设计类实验辅助教学平台

题目描述:

5dbe3e3ff9504ec38436bc40823d2816.png

算法分析:

如你不能拿全该题的分数,且和我第一次做一样感觉自己逻辑没有问题的话,那么十有八九题目意思理解错了,它的要求不只是仅仅要求将 a+b 的和按每个 3 个数字用一个“逗号”分隔开,而是要求按照我们数钱时的操作将其通过逗号分隔开,举个例子:

1111   应该是 1,111

10000  应该是 10,000

999999  应该是 999,999

1999999  应该是 1,999,999

像这样,以此类推...

而这样的话,正序就不太方便处理,我们可以先将 a+b 的和转换成字符串,然后逆序存入答案中,并在存入的过程中在适当的位置添加逗号,最后再 将答案的字符反转一下输出即可。

AC代码如下:

#include <bits/stdc++.h>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b;
    int sum = a + b;
    // 负数转正数
    if(sum<0){
        cout << "-";
        sum = -sum;
    }
    string result;
    // 数字变成字符串
    string numStr = to_string(sum);
    int len = numStr.length();
    //计数是第几个字符了
    int cnt = 0;
    for (int i = len - 1; i >= 0; i--) {
        result += numStr[i];
        cnt++;
        //如果计数到是 3 的倍数个的字符且不是最后一个字符,则在其后面添加一个 “逗号” 分隔开
        if (cnt%3 == 0 && i!=0) {
            result += ',';
        }
    }
    // 反转字符串
    reverse(result.begin(), result.end());

    cout << result << endl;

    return 0;
}

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值