pat 1002. 写出这个数 (20)

 

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])])

依然是最后的格式输出有点烦,最后一个输出重新写了一句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值