• 「PAT甲级真题解析」Advanced Level 1005 Spell It Right


    PAT (Advanced Level) Practice 1005 Spell It Right

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

    问题分析

    题设明确要求我们将给定的一个非负数的各个数字相加求和, 然后输出这个和各个数字的英文形式, 妥妥的模拟题, 而且步骤已经非常明确。
    需要考虑的是给定的非负数最大可以是10^100(101位, 1个一后面跟了100个零), 所以需要用字符串来存储整数.

    完整描述步骤

    1. 获取输入: 给定的非负整数(字符串形式存储)
    2. 初始化求和计数器: sum = 0
    3. 访问字符串的每一位:
      • 计数器加上该位字符所代表的数字值
    4. 将和转为字符串形式
    5. 访问和字符串的每一位:
      • 输出该位字符所代表的数字的英文单词

    伪代码描述

    1. get input: number (stored as string)
    2. init counter: sum = 0
    3. for digit in number:
      • sum += int(digit)
    4. sum_stirng = string(sum)
    5. create mapping_from_digit_to_english_word = {
      0: “zero”,
      1: “one”,

      “9”: “nine”,
      }
    6. print(mapping_from_digit_to_english_word[int(sum_stirng[0])])
    7. for index in range(1, len(sum_stirng)):
      • print(" " + mapping_from_digit_to_english_word[int(sum_stirng[index])]);

    完整提交代码

    /*
    # 问题分析
    题设明确要求我们将给定的一个非负数的各个数字相加求和, 然后输出这个和各个数字的英文形式, 妥妥的模拟题, 而且步骤已经非常明确。
    需要考虑的是给定的非负数最大可以是10^100(101位, 1个一后面跟了100个零), 所以需要用字符串来存储整数.
    
    # 完整描述步骤
    1. 获取输入: 给定的非负整数(字符串形式存储)
    2. 初始化求和计数器: sum = 0
    3. 访问字符串的每一位:
        - 计数器加上该位字符所代表的数字值
    4. 将和转为字符串形式
    5. 访问和字符串的每一位:
        - 输出该位字符所代表的数字的英文单词
    
    # 伪代码描述
    1. get input: number (stored as string)
    2. init counter: sum = 0
    3. for digit in number:
        - sum += int(digit)
    4. sum_stirng = string(sum)
    5. create mapping_from_digit_to_english_word = {
            0: "zero",
            1: "one",
            ...
            "9": "nine",
        }
    6. print(mapping_from_digit_to_english_word[int(sum_stirng[0])])
    6. for index in range(1, len(sum_stirng)):
        - print(" " + mapping_from_digit_to_english_word[int(sum_stirng[index])]);
    */
    
    
    # include
    using namespace std;
    
    int main(){
        string words[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 
        
        string number;
        cin >> number;
        int length = number.length();
        int digit_sum = 0;
        for (int i = 0; i < length; i++)
            digit_sum += number[i] - '0';
    
        string sum = to_string(digit_sum);
        
        
        cout << words[sum[0] - '0'];
        for (int i = 1; i < sum.length(); i++){
            int index = sum[i] - '0';
            cout << " " << words[index];
        }
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    Partition架构
    NTP网络时间服务器是如何完成它的授时服务的?
    LeetCode二叉树系列——144.二叉树的前序遍历
    【需求侧响应】综合能源中多种需求响应——弹性电价、可平移及可削减研究(Matlab代码实现)
    【软考笔记】(四)数据库
    数仓学习笔记(4)——数仓搭建(ODS层和DIM层)
    HTTPS协议详解
    96-MySQL高级
    Git 学习(三)---- GitHub 远程库操作
    Mongodb 删除集合数据后如何释放磁盘空间
  • 原文地址:https://blog.csdn.net/qq_41785288/article/details/127578447