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

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

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

Table of Contents

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<iostream>
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;
}