PAT-B 1002. 写出这个数 (20)

传送门

https://pintia.cn/problem-sets/994805260223102976/problems/994805324509200384

题目

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu

分析

Java实现方法是:
1.读入一行字符串,然后将字符串转为char数组;
2.将char数组的每位转为int型,这里注意要减去0的ASCII码为48,然后相加起来;
3.然后将和再转为char数组,根据每位的数字,输出对应的拼音即可,需要注意的是最后没有空格。

C++实现方法与Java类似,这里就不再赘述。

源代码

//C/C++实现
#include 
#include 
#include 
#include 

using namespace std;

int main(){
    char c[102];
    gets(c);
    int sum = 0;
    for(int i = 0; i < strlen(c); i ++){
        sum += (c[i] - '0');
    }
    stringstream ss;
    ss << sum;
    string s = ss.str();
    for(int j = 0; j < s.size(); j ++){
        if(s[j] == '0'){
            printf("ling");
        }
        else if(s[j] == '1'){
            printf("yi");
        }
        else if(s[j] == '2'){
            printf("er");
        }
        else if(s[j] == '3'){
            printf("san");
        }
        else if(s[j] == '4'){
            printf("si");
        }
        else if(s[j] == '5'){
            printf("wu");
        }
        else if(s[j] == '6'){
            printf("liu");
        }
        else if(s[j] == '7'){
            printf("qi");
        }
        else if(s[j] == '8'){
            printf("ba");
        }
        else{
            printf("jiu");
        }
        if(j != s.size() - 1){
            printf("%c", ' ');
        }
    }
    printf("%c", '\n');
    return 0;
}
//Java实现
import java.util.Scanner;
public class Main {

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        String s1 = scanner.next();
        char[] c1 = s1.toCharArray();
        int sum = 0;
        for(int i=0;i

你可能感兴趣的:(PAT-B 1002. 写出这个数 (20))