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

Table of Contents

问题分析

题设明确要求我们将给定的一个非负数的各个数字相加求和, 然后输出这个和各个数字的英文形式, 妥妥的模拟题, 而且步骤已经非常明确。 需要考虑的是给定的非负数最大可以是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])]);

完整提交代码

1/* 2# 问题分析 3题设明确要求我们将给定的一个非负数的各个数字相加求和, 然后输出这个和各个数字的英文形式, 妥妥的模拟题, 而且步骤已经非常明确。 4需要考虑的是给定的非负数最大可以是10^100(101位, 1个一后面跟了100个零), 所以需要用字符串来存储整数. 5 6# 完整描述步骤 71. 获取输入: 给定的非负整数(字符串形式存储) 82. 初始化求和计数器: sum = 0 93. 访问字符串的每一位: 10 - 计数器加上该位字符所代表的数字值 114. 将和转为字符串形式 125. 访问和字符串的每一位: 13 - 输出该位字符所代表的数字的英文单词 14 15# 伪代码描述 161. get input: number (stored as string) 172. init counter: sum = 0 183. for digit in number: 19 - sum += int(digit) 204. sum_stirng = string(sum) 215. create mapping_from_digit_to_english_word = { 22 0: "zero", 23 1: "one", 24 ... 25 "9": "nine", 26 } 276. print(mapping_from_digit_to_english_word[int(sum_stirng[0])]) 286. for index in range(1, len(sum_stirng)): 29 - print(" " + mapping_from_digit_to_english_word[int(sum_stirng[index])]); 30*/ 31 32 33# include<iostream> 34using namespace std; 35 36int main(){ 37 string words[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 38 39 string number; 40 cin >> number; 41 int length = number.length(); 42 int digit_sum = 0; 43 for (int i = 0; i < length; i++) 44 digit_sum += number[i] - '0'; 45 46 string sum = to_string(digit_sum); 47 48 49 cout << words[sum[0] - '0']; 50 for (int i = 1; i < sum.length(); i++){ 51 int index = sum[i] - '0'; 52 cout << " " << words[index]; 53 } 54 return 0; 55} 56
Mastodon