题目
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于。
输出格式:在一行内输出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(); } }