1005 Spell It Right (20分)
题目要求
Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output every digit of the sum in English.
Input Specification:
给出一个非负整数N,你的任务是计算所有N的数位数字之和,然后将这个和的每一个数位都用英语表示出来。
Each input file contains one test case. Each case occupies one line which contains an N (≤10100).
每个测试样例包含一个例子,每个都会将整数N输出到一行里。
Output Specification:
输出要求:
For each test case, output in one line the digits of the sum in English words. There must be one space between two consecutive words, but no extra space at the end of a line.
对于每个测试样例,将数位的和和英文输出到一行,两个单词之间要有一个空格,除此以外,不要输出多余空格。
输入样例:
12345
输出样例:
one five
代码实现:
这是我的代码,用C实现的,始终有两个样例不能过:
#include "stdio.h"
int a[1024];
int main()
{
int x;
scanf("%d",&x);//用户输入一个整数x
if(x==0)
{
printf("zero");
return 0;
}
int sum = 0;
while(x!=0)//分离数位并计算数位之和
{
sum=sum+x%10;
x=x/10;
}
int i=0;
while(sum!=0)
{
a[i]=sum%10;
sum=sum/10;
i++;
}
for(int j=i-1;j>=0;j--)
{
int t=a[j];
if(t==1)
printf("one");
else if(t==2)
printf("two");
else if(t==3)
printf("three");
else if(t==4)
printf("four");
else if(t==5)
printf("five");
else if(t==6)
printf("six");
else if(t==7)
printf("seven");
else if(t==8)
printf("eight");
else if(t==9)
printf("nine");
else if(t==0)
printf("zero");
if(j!=0)
printf(" ");
}
return 0;
}
这是柳神的代码实现
#include <iostream>
using namespace std;
int main() {
string a;
cin >> a;
int sum = 0;
for (int i = 0; i < a.length(); i++) //字符串的操作比数字容易很多
sum += (a[i] - '0'); //字符和数字的转换通过加减'0'来完成
string s = to_string(sum);//把和转换为字符串
string arr[10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};//看!C++里有字符串数组!
cout << arr[s[0] - '0'];//单独输出第一个避免多余空格
for (int i = 1; i < s.length(); i++)
cout << " " << arr[s[i] - '0'];
return 0;
}
C++允许字符串数组的存在,其访问方式见上例子。
此外,这个代码充分体现了柳神在字符串应用上如臂使指的熟练程度,respect!
And I will get there in a near future.
生词
生词 | 翻译 |
---|---|
non-negative | 非负 |