- 题目详情
- 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++)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)