【PAT】A1001 A+B Format

原题回顾

Calculate a+b and output the sum in standard format — that is, the digits must be separated into groups of three by commas (unless there are less than four digits).

Input Specification:

Each input file contains one test case. Each case contains a pair of integers a and b where −106 ≤ a,b ≤ 106. The numbers are separated by a space.

Output Specification:

For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.

Sample Input:

 -1000000 9

Sample Output:

 -999,991

题意理解

题目要求计算两个绝对值不超过106的整数之和,并按照英文数字格式输出(从右往左每出现三个数字添加一个逗号)。

由于和不会超出整形的范围,不需要考虑溢出的问题。

需要提一下的是,PAT的题目描述有时候要求学生具备一定的常识。例如本题的输出描述是将结果每三位数一组,用逗号隔开。但实际上如果按照从左往右每三个数字输出一个逗号来解答,那么会错一半的测试点,扣6分。

mountains

常见思路

这题柳神只用了一个判断就解决了,但在考试的过程中这可能不是最佳方案。因为不是每个同学都有扎实的数论基础,面对所有这样的问题都能轻松地把规律找出来。

本题一方面需要我们求出结果的每一位数(结果是倒序的),另一方面要求我们输出逗号(在倒序的视角下,每出现三个数字就要有一个逗号)。

因为出现了比较多的倒序的问题,我比较倾向于用栈来处理这样的情况,相关的条件考虑跟栈的大小挂钩即可。

AC代码

#include <iostream>
#include <stack>

using namespace std;

int main() {
    stack<int> result;
    int a, b, sum = 0, length;
    cin >> a >> b;
    sum = a + b;
    //负数一律取成正的来处理
    if (sum < 0) {
        cout << "-";
        sum = -sum;
    }
    //单独处理和为0的情况
    if (!sum){
        cout << 0;
    }
    //计算结果的每一位数字并存在栈中
    while (sum) {
        result.push(sum % 10);
        sum /= 10;
    }
    length = result.size(); //保存栈初始的元素个数(随着弹出元素这个数量会减少)
    while (!result.empty()) {
        if (result.size() != length && result.size() % 3 == 0) { //栈中的元素个数为3的倍数且不在末尾则输出一个逗号
            cout << ",";
        }
        cout << result.top();// 输出各位数字
        result.pop();
    }
}

注意事项

  • 具体实现的时候不一定要用栈这种结构,变长数组也可以轻松搞定,因为C++给这个容器提供了很多尾端操作的函数。再退一步其实用数组就行,因为数字的长度上限是已知的,不用担心越界。
  • 本体能够放心引入容器,一个原因是数据规模不是很大。其实PAT网站上用来练习的真题时空的要求全都是一样的,这里就算多用了栈,复杂度也比不上树和图中的某些算法。
  • 输出逗号的时候要注意,末尾不要输出,例如计算结果是100的时候,不要输出成100,
  • 注意边界:本题由于测试用例给的结果是负数,所以应该不会有小伙伴忘记处理负数(不然就样例都过不了);但是即便如此还是要小心0,否则测试点4过不了。
  文章标题下的时间是文章发布时间,鼠标悬停可以看到最新修改时间,请注意信息的有效性。
  版权声明:
    除非特殊说明,本站所有内容均为原创,采用 CC BY-NC-SA 4.0 许可协议进行共享 。
    需转载请注明原文标题:【PAT】A1001 A+B Format 及链接:https://www.grobsr.com/post-a1001/
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇