Table of Contents
问题分析
题设明确要求我们将给定的一个非负数的各个数字相加求和, 然后输出这个和各个数字的英文形式, 妥妥的模拟题, 而且步骤已经非常明确。 需要考虑的是给定的非负数最大可以是10^100(101位, 1个一后面跟了100个零), 所以需要用字符串来存储整数.
完整描述步骤
- 获取输入: 给定的非负整数(字符串形式存储)
- 初始化求和计数器: sum = 0
- 访问字符串的每一位:
- 计数器加上该位字符所代表的数字值
- 将和转为字符串形式
- 访问和字符串的每一位:
- 输出该位字符所代表的数字的英文单词
伪代码描述
- get input: number (stored as string)
- init counter: sum = 0
- for digit in number:
- sum += int(digit)
- sum_stirng = string(sum)
- create mapping_from_digit_to_english_word = { 0: "zero", 1: "one", ... "9": "nine", }
- print(mapping_from_digit_to_english_word[int(sum_stirng[0])])
- 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