读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。 输出格式:在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。 |
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路
1. 给的数字n可以非常大(10^100),所有只能把n当成字符串读入
2. 设sum为所有位数上的数字和
3. 因为字符 '0' ASCII码为48,'1' ASCII码为49
所以对于组成n的任意一个数字num, sum+=num-48
4. 取余sum并存入一个数组,最后挨个按其对应的拼音输出即可
扩展思考
算出各位数总和后,你能否用递归法直接输出答案
C
#include<stdio.h>
char* OP(int num){
if(num==1) return "yi";
if(num==2) return "er";
if(num==3) return "san";
if(num==4) return "si";
if(num==5) return "wu";
if(num==6) return "liu";
if(num==7) return "qi";
if(num==8) return "ba";
if(num==9) return "jiu";
return "ling";
}
int main(){
char n[2022];
int sum=0,nums[2022],len=0; // 总和 , 总和各个位数保存 , 总和的位数
scanf("%s",n);
for(int i=0;n[i]!='\0';i++){
sum += n[i] - 48;
}
do{ // 考虑sum=0的情况,不能直接用while循环
len++;
nums[len] = sum%10;
sum/=10;
}while(sum>0);
for(int i=len;i>1;i--){
printf("%s ",OP(nums[i]));
}
printf("%s",OP(nums[1]));
return 0;
}
C++ (递归输出)
#include<bits/stdc++.h>
using namespace std;
string key[10] = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
void OP(int num){
if(num>9){
OP(num/10);
cout << " ";
}
cout << key[num%10];
}
int main(){
string n;
int sum=0;
cin >> n;
for(int i=0;i<n.size();i++){
sum += n[i]-48;
}
OP(sum);
return 0;
}
JAVA
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int sum=0,len=0;
int[] nums = new int[2022];
for(int i=0;i<s.length();i++){
sum += s.charAt(i)-48;
}
do{
nums[len++] = sum % 10;
sum/=10;
}while(sum>0);
while (len>0){
switch (nums[--len]) {
case 0: System.out.print("ling");break;
case 1: System.out.print("yi");break;
case 2: System.out.print("er");break;
case 3: System.out.print("san");break;
case 4: System.out.print("si");break;
case 5: System.out.print("wu");break;
case 6: System.out.print("liu");break;
case 7: System.out.print("qi");break;
case 8: System.out.print("ba");break;
case 9: System.out.print("jiu");break;
}
if(len>0) System.out.print(' ');
}
}
}
PY
dict1 = {0: 'ling', 1: "yi", 2: 'er', 3: 'san', 4: 'si', 5: 'wu', 6: 'liu', 7: 'qi', 8: 'ba', 9: 'jiu'}
def OP(sum):
if sum > 9:
OP(sum // 10)
print(" ", end='')
print(dict1[sum % 10], end='')
n = input()
sum = 0
for num in n:
sum += ord(num) - 48
OP(sum)
本专栏个人参考题解(C、C++、Java、py) -> PAT (Basic Level) Practice(中文)
持续更新中,点个关注、按个收藏、不迷路哦~