PAT甲级 1001 A+B Format (20 分) 全网最细 题目详解 翻译 完整代码 PAT真题解析

   日期:2021-04-02     浏览:95    评论:0    
核心提示:1001 A+B Format (20 分)本道题需要了解的预备知识:string头文件使用方法中文翻译:(原题目为英文)计算a+b并以标准格式输出,即:每三位加一个 “,” 的格式输出(若少于四个数字则直接输出)。输入格式:每个输入文件包含一个测试用例。每个用例包含一对整数a和b,其中(-10^6 ≤ a,b ≤ 10^6),数字之间用空格分割。输出格式:对于每个测试用例,你需要按照格式要求在一行中输出a+b的计算结果。输入样例:-1000000 9输出样例:-99

1001 A+B Format (20 分)

本道题需要了解的预备知识:string头文件使用方法

中文翻译:(原题目为英文)

计算a+b并以标准格式输出,即:每三位加一个 “,” 的格式输出(若少于四个数字则直接输出)。

输入格式:

每个输入文件包含一个测试用例。每个用例包含一对整数a和b,其中(-10^6 ≤ a,b ≤ 10^6),数字之间用空格分割。

输出格式:

对于每个测试用例,你需要按照格式要求在一行中输出a+b的计算结果。

输入样例:

-1000000 9

输出样例:

-999,991

题目解析:

字符串处理题,较为简单,有两种解题思路,无非都是向字符串中添加逗号输出。如果没思考过的话,先去思考再继续往下看!
首先是柳神的方法,我觉得一般人在考场上都想不出来这么”神奇“的表达式,短短几行代码一边判断一边输(不愧是柳神)。普通人(我)大概率想到的都是:”先加逗号,再输出"的形式。但是正向不好判断逗号的位置,所以从后向前看,每三个数字添加一个逗号,并且需要注意边界情况(第一位数字)。

整体思路如下:

  1. a+b的结果可能为正数也可能为负数,符号会干扰我们对计算结果的处理(添加逗号)。所以需要在最开始先进行符号处理(判断字符串的第一位字符:若为 “-” 输出负号并删除字符串中的负号,若为数字说明是正数,不需要处理)。
  2. 字符串从后向前遍历,每三个数字在该数字位上(前)添加一个逗号。
  3. 注意边界处理,如果出现以下情况,则不可在首位数字前添加逗号。即条件为:当前位不是字符串的第一位(0号位 )且当前位数刚好为三的倍数。
  4. 处理完成后直接输出,没什么好说的,直接上代码。
#include <iostream>
using namespace std;
int main() { 
    int a, b;
    cin >> a >> b; //输入a和b
    string s = to_string(a + b); //将a+b的值转换为字符串
    if(s[0] == '-') {  //处理符号
        cout << '-';
        s.erase(0, 1);
    }
    int count = 0; //用于记录当前位置
    for(int i = s.length() - 1; i >= 0; i--){  //添加逗号
        count++;
        if(count % 3 == 0 && i > 0){ 
            s.insert(i, ",");
        }
    }
    cout << s;
}

全部通过

最后附上柳神的代码,如果有兴趣的话可以研究一下那个“神奇”的表达式。
柳神柳神,永远滴神。

#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;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服