当前位置: 代码迷 >> 综合 >> PAT甲级1005 Spell it Right 【20】【字符串操作】
  详细解决方案

PAT甲级1005 Spell it Right 【20】【字符串操作】

热度:93   发布时间:2024-02-25 14:53:51.0

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 (≤10?100??).
每个测试样例包含一个例子,每个都会将整数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);//用户输入一个整数xif(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 非负
  相关解决方案