- 题目详情
- 1002 写出这个数 (20 分)
- 输入格式:
- 输出格式:
- 题解
- C++版本
- Python版本
- 总结
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
#includePython版本#include using namespace std; int main() { string s; cin >> s; int sum = 0; string str[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; for (int i = 0; i < s.length(); i++) sum += (s[i] - '0'); string num = to_string(sum); for (int i = 0; i < num.length(); i++) { cout << str[num[i] - '0']; if (i != num.length() - 1) cout << ' '; else cout << endl; } return 0; }
n = input() # input() 函数接受一个标准输入数据,返回为 string 类型
sum = 0
piny = ["ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"]
for number in n:
sum = sum + (ord(number) - ord('0'))
sum_str = str(sum)
for i in range(len(sum_str)):
if i != len(sum_str) - 1:
print(piny[ord(sum_str[i]) - ord('0')], end=' ')
else:
print(piny[ord(sum_str[i]) - ord('0')])
-------------------以下这部分代码跑步来的结果部分正确,但具体原因没找到-------------------
for number in sum_str:
if(number == sum_str[len(sum_str) - 1]):
print(piny[ord(number) - ord('0')])
else:
print(piny[ord(number) - ord('0')], end = ' ')
n = input()
# 输入可以用map函数把每个字符转化为int类型,map返回一个迭代器,使用 list() 将其转换为列表
x = list(map(int,n))
y = sum(x)
dt = {'0':'ling',
'1':'yi',
'2':'er',
'3':'san',
'4':'si',
'5':'wu',
'6':'liu',
'7':'qi',
'8':'ba',
'9':'jiu',
}
s = str(y)
for i in range(len(s)):
if i != len(s)-1:
print(dt[s[i]], end=' ')
else:
print(dt[s[i]])
总结
1、题目中要求 n 小于 10100 ,那么我们设 n 为 long long 数据类型是不合理的(long long可以表示的最大数据为 263 - 1,263 - 1 小于 10100)因此我们要用string类型来定义输入的n。
2、当我们把字符串类型作为输入数据的类型时,怎样计算出各位数字的和是一个值得思考的问题。首先应想到如何定位出输入的各位数字,其次就是利用定位出的各位数字(每一位都是char类型)- ‘0’ 来把该字符转化为对应的数字。
3、这里需要注意的是,在C语言等高级语言中,字符之间的减运算都是支持的,但是在python中直接进行字符减运算是不被允许的。
但是我们经常需要进行字符之间的减运算,那么在python中可以借助ord()函数实现,ord()是python自带的函数,无需导入。
ord()函数实际上是将字符转化成对应的ASCII码值,然后通过ASCII码值进行加减运算。
4、这次的Python版本代码让我学习到了map()函数的用法,sum()函数的用法(即可以直接对整个列表的数据求和),还有print()函数中可用end = ’ '指定输出的内容以什么结束。
5、for number in n 是循环输出 n 这组字符串中的每个字符
for i in range(len(s)) 是对整型int数据进行循环,类似于C++中的for(int i=0; i<10; i++)



