1002. 写出这个数 (20)
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
c/c++:
#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
char a[102];
int b = 0 , c = 0;
int d [20];
int i;
cin >> a;
c = strlen(a);
for (int i = 0;i < c; i++)
{
b = b + a[i]-'0';
}
i=0;
while ( b != 0)
{
d[i] = b % 10;
b = b / 10;
i++;
}
for (int y = i-1;y >= 0;y--)
{
switch (d[y])
{
case 0 : cout << "ling";break;
case 1 : cout << "yi";break;
case 2 : cout << "er";break;
case 3 : cout << "san";break;
case 4 : cout << "si";break;
case 5 : cout << "wu";break;
case 6 : cout << "liu";break;
case 7 : cout << "qi";break;
case 8 : cout << "ba";break;
case 9 : cout << "jiu";break;
}
if (y != 0)
cout << " ";
}
}
用c/c++写,其实难度不大,由于数据位数比较大,将其变成字符串,然后从字符串转化成数字,及减去'0'。
然后相加,分离位数,每一位转换成汉语拼音输出,注意空格的要求。
python:
num = raw_input()
d = []
sum = 0
for i in range(len(num)):
sum = int(num[i])+sum
sum = str(sum)
for i in range(len(sum)):
if sum[i] == '0':
print "ling",
if sum[i] == '1':
print "yi",
if sum[i] == '2':
print "er",
if sum[i] == '3':
print "san"
if sum[i] == '4':
print "si",
if sum[i] == '5':
print "wu",
if sum[i] == '6':
print "liu",
if sum[i] == '7':
print "qi",
if sum[i] == '8':
print "ba",
if sum[i] == '9':
print "jiu",
用python写更简单,直接字符串与数字之间类型转化,注意print的输入输出不换行的用法,在print “XXX”之后加一个“,”。(python 2.7)
代码已经测试通过
过了一年,重新看一看当初的代码,感觉太丑陋了。
重新用python3写了一次。
num = input()
lst = ['ling','yi','er','san','si','wu','liu','qi','ba','jiu']
sum = 0
for i in range(len(num)):
sum = int(num[i])+sum
sum = str(sum)
for i in sum[:-1]:
print (lst[int(i)],end = ' ')
print(lst[int(sum[-1])])
依然是最后的格式输出有点烦,最后一个输出重新写了一句。