PAT乙级 1002.写出这个数

326

水题,可以练习下Python压缩代码行数

题目


原题链接

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字

输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于$10^100$。

输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:
1234567890987654321123456789

输出样例:
yi san wu


解析


语法题,直接按照要求写就行
求和后,打一个拼音的表,直接查表输出即可。
Python不考虑效率的话,可以很短

代码


C++解法


#include <cstdio>
#include<cstring> 
const int maxn = 105;
char s[maxn];

char pinyin[10][5] = {"ling", "yi",  "er", "san", "si",
                      "wu",   "liu", "qi", "ba",  "jiu"};

int numStack[maxn];

void toPinyin(int num) {
    int stackPos = 0;
    while (num) {
        numStack[stackPos++] = num % 10;
        num /= 10;
    }
    for (int i = stackPos - 1; i >= 0; --i) {
        printf("%s", pinyin[numStack[i]]);
        if (i)
            printf(" ");
    }
    printf("\n");
}

int main() {
    scanf("%s", s);
    int l = strlen(s);
    int ans = 0;
    for (int i = 0; i < l; ++i) {
        ans += s[i] - '0';
    }
    toPinyin(ans);
    return 0;
}


Python解法


pinyin = ["ling", "yi",  "er", "san", "si", "wu",   "liu", "qi", "ba",  "jiu"]
print(" ".join([pinyin[int(i)] for i in str(sum([int(i) for i in input()]))]))


Java解法


import java.util.ArrayList;
import java.util.Scanner;

class Main {
    static Scanner in;

    static String[] pinyin = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };

    public static void getPinYin(int n) {
        ArrayList<String> output = new ArrayList<String>();
        while (n > 0) {
            output.add(0, pinyin[n % 10]);
            n /= 10;
        }

        boolean first = true;
        for (String i : output) {
            if (first == true)
                first = false;
            else
                System.out.print(" ");
            System.out.print(i);
        }
        System.out.print("\n");
    }

    public static void main(String args[]) {
        in = new Scanner(System.in);
        String s = in.next();
        int sum = 0;
        for (int i = 0; i < s.length(); ++i)
            sum += s.charAt(i) - '0';
        getPinYin(sum);
        in.close();
    }
}
发布评论
  • 点击查看/关闭被识别为广告的评论