PAT (Advanced Level) Practice 1005 Spell It Right
如果对你有帮助,要点个赞让我知道喔~
题设明确要求我们将给定的一个非负数的各个数字相加求和, 然后输出这个和各个数字的英文形式, 妥妥的模拟题, 而且步骤已经非常明确。
需要考虑的是给定的非负数最大可以是10^100(101位, 1个一后面跟了100个零), 所以需要用字符串来存储整数.
/*
# 问题分析
题设明确要求我们将给定的一个非负数的各个数字相加求和, 然后输出这个和各个数字的英文形式, 妥妥的模拟题, 而且步骤已经非常明确。
需要考虑的是给定的非负数最大可以是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;
}