题目
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入与输出
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100 。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
分析
简要分析
从n的给值来看,远远超出long long int类型的数据范围。而求的是各位的数字之和,然后再用拼音输出。所以,考虑用字符串的的方式存储n。
解决方案
getchar函数正好满足需求
使用不同的编程语言,需要不同头文件。
C
#include<stdio.h>
C++
#include<cstdio>
AC代码
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;
void print_pinyin(int x)
{switch(x){case 0: cout<<"ling";break;case 1: cout<< "yi";break;case 2:cout<<"er";break;case 3:cout<<"san";break;case 4:cout<<"si";break;case 5:cout<<"wu";break;case 6:cout<<"liu";break;case 7:cout<<"qi";break;case 8:cout<<"ba";break;case 9:cout<<"jiu";break;default:break;}}
int main()
{int i,x,sum=0;char n;while((n=getchar())!='\n'){sum=sum+(n-'0');//字符-'0':字符隐性转换为整数}int temp=0;int x1=sum;while(x1!=0){temp++;x1=x1/10;}int *a=(int *)malloc(temp*sizeof(int));for(i=temp-1;i>=0;i--){a[i]=sum%10;sum=sum/10;}for(i=0;i<temp;i++){print_pinyin(a[i]);if(i!=(temp-1)){cout<<" ";}}return 0;
}
更多题解
pat 乙级 题解汇总(持续更新)(C++)