#题目
时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10 <math> <semantics> <mrow> <msup> <mn> 1 </mn> </msup> </mrow> <annotation encoding="application&#47;x&#45;tex"> ^1 </annotation> </semantics> </math>1 <math> <semantics> <mrow> <msup> <mn> 0 </mn> </msup> </mrow> <annotation encoding="application&#47;x&#45;tex"> ^0 </annotation> </semantics> </math>0 <math> <semantics> <mrow> <msup> <mn> 0 </mn> </msup> </mrow> <annotation encoding="application&#47;x&#45;tex"> ^0 </annotation> </semantics> </math>0
输出格式:
在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:

1234567890987654321123456789

输出样例:

yi san wu

#分析:
n太长了只有字符串输入,然后再挨个加每一位的数字(注意转换),最后再输出取余存储逆序输出。
亮点是把数字对应的字符串开全局变量存储起来

#代码(CPP)

#include<iostream>
#include<string.h>
using namespace std;
char name[][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int main(){
    string a;
    char b[5][5];
    int sum=0;
    int k=0;
    cin>>a;
    for(int i=0;a[i]!='\0';i++)
        sum += a[i]-'0';
    while(sum!=0){
        int t=sum%10;
        sum/=10;
        strcpy(b[k++],name[t]);
    }
    for(int i=k-1;i>=0;i--){
        if(i!=k-1)
            cout<<" ";
        cout<<b[i];
    }
    return 0;
}

#代码(Java)

import java.util.*;
public class Main {
		static String name[] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String ans[] =new String[5];
		int sum=0;
		int k=0;
		String a=in.next();
		for(int i=0;i<a.length();i++)
			sum += a.charAt(i)-'0';
		while(sum!=0) {
			ans[k++]=name[sum%10];
			sum/=10;
		}
		for(int i=k-1;i>=0;i--) {
			if(i!=k-1)
				System.out.print(" ");
			System.out.print(ans[i]);
		}
		in.close();
	}

}