「PAT甲级真题解析」Advanced Level 1001 A+B Format

题设要求两个整数A和B的和, 并且按照指定格式输出。 由于给定整数的范围在整型范围内, 所以可以用整型直接存储和相加。 重点在于实现要求的用逗号将每三个数字进行分组。

·
#数据结构#算法#c++#需求分析#pat考试

Table of Contents

PAT (Advanced Level) Practice 1001 A+B Format

如果对你有帮助,要点个赞让我知道喔~

问题分析

题设要求两个整数A和B的和, 并且按照指定格式输出。 由于给定整数的范围在整型范围内, 所以可以用整型直接存储和相加。 重点在于实现要求的用逗号将每三个数字进行分组。

每三个数字进行分组

按整数处理

由于分组是从数值的末尾开始计数的, 所以如果将和作为整数进行处理, 通过求余并计数的方式, 应该输出逗号的条件可以简答表示为"(i+1) % 3 == 0", 但是由于输出顺序是从左往右的, 输出就成了难点

转换成字符串处理

字符串的形式优点就是按索引递增的方式输出字符就可以符合输出的顺序。 而难点在于判断是否应该输出逗号的条件。 由于分组是从末尾开始每三个数字分一组的, 所以是当当前索引后面的数字个数是3的倍数时要输出逗号, 表达式为: (length - (i+1)) % 3 == 0 并且注意末尾以及负号后面不能输出逗号, 所以是 且 "(length - (i+1)) != 0" 且 "string[i] != '-'"

完整描述步骤

  1. 获取输入: A, B
  2. 求和
  3. 和作为字符串, 按索引递增访问字符串元素:
    • 输出当前字符
    • 如果当前字符是'-', 不输出逗号
    • 如果当前索引i满足条件: (length - (i+1)) % 3 == 0 and (length - (i+1)) != 0
      • 则: 输出逗号

伪代码描述

  1. get input: A, B
  2. calculate sum = A + B;
  3. transfer sum as string;
  4. for index in range(0, len(sum)):
    • print(sum[index]);
    • if sum[index] == '-':
      • continue;
    • if (length - i - 1) % 3 == 0 and (length - i - 1) != 0:
      • print(",")

完整提交代码

 
/*
# 问题分析
题设要求两个整数A和B的和, 并且按照指定格式输出。
由于给定整数的范围在整型范围内, 所以可以用整型直接存储和相加。
重点在于实现要求的用逗号将每三个数字进行分组。
 
# 每三个数字进行分组
## 按整数处理
由于分组是从数值的末尾开始计数的, 所以如果将和作为整数进行处理, 通过求余并计数的方式, 
应该输出逗号的条件可以简答表示为"(i+1) % 3 == 0", 但是由于输出顺序是从左往右的, 输出就成了难点
 
## 转换成字符串处理
字符串的形式优点就是按索引递增的方式输出字符就可以符合输出的顺序。
而难点在于判断是否应该输出逗号的条件。
由于分组是从末尾开始每三个数字分一组的, 所以是当当前索引后面的数字个数是3的倍数时要输出逗号, 
表达式为: (length - (i+1)) % 3 == 0
并且注意末尾以及负号后面不能输出逗号, 所以是 且 "(length - (i+1)) != 0" 且 "string[i] != '-'"
 
# 完整描述步骤
1. 获取输入: A, B
2. 求和
3. 和作为字符串, 按索引递增访问字符串元素:
    - 输出当前字符
    - 如果当前字符是'-', 不输出逗号
    - 如果当前索引i满足条件: (length - (i+1)) % 3 == 0 and (length - (i+1)) != 0
        - 则: 输出逗号
 
# 伪代码描述
1. get input: A, B
2. calculate sum = A + B;
3. transfer sum as string;
3. for index in range(0, len(sum)):
    - print(sum[index]);
    - if sum[index] == '-':
        - continue;
    - if (length - i - 1) % 3 == 0 and (length - i - 1) != 0:
        - print(",")
*/
 
 
# include<iostream>
using namespace std;
 
int main(){
    int a, b;
    cin >> a >> b;
    string sum = to_string(a + b);
    int length = sum.length();
    for (int i = 0; i < length; i++){
        cout << sum[i];
        if (sum[i] == '-') continue;
 
        if ((length - (i+1)) % 3 == 0 && (length - (i+1)) != 0){
            cout << ",";
        }
    }
    
    
    
    return 0;
}
「PAT甲级真题解析」Advanced Level 1001 A+B Format | 生活糖果