您的位置:首页 > 其它

PAT 1002. 写出这个数 (20)

2018-01-02 13:11 162 查看
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。输入样例:
1234567890987654321123456789
输出样例:yi san wu
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
char n[1000000];
int main()
{
cin>>n;
int sum=0;
int ndigit;
int tmp;
ndigit=strlen(n); //strlen()可以得出char数组中元素的个数
for(int i=0;i<ndigit;i++) //利用字符数字的性质计算各位数字的和sum
{
sum+=n[i]-'0';
}
ndigit=0;
tmp=sum;
while(sum!=0) //计算sum的位数
{
sum=sum/10;
++ndigit;
}
int nd2=ndigit; //将sum的位数值赋给nd2,因为下面循环中的nd2会和--ndigit冲突,所以将一个数值赋给两个不同的变量
for(int j=0;j<nd2;j++) //将sum的每一位拆分,利用swith语句的性质输出各位的拼音
{
int a=0;
switch(int(tmp/pow(10,--ndigit))) //pow(x,y)是x的y次方,头文件是math.h
{
case 0:cout<<"ling";a=0;break;
case 1:cout<<"yi";a=1;break;
case 2:cout<<"er";a=2;break;
case 3:cout<<"san";a=3;break;
case 4:cout<<"si";a=4;break;
case 5:cout<<"wu";a=5;break;
case 6:cout<<"liu";a=6;break;
case 7:cout<<"qi";a=7;break;
case 8:cout<<"ba";a=8;break;
case 9:cout<<"jiu";a=9;break;
}
tmp=tmp-pow(10,ndigit)*a; //用sum将已经输出的最高位减去,剩下次高位
if(j<nd2-1)cout<<" "; //控制输出的空格位数,并且让最后一位不输出空格
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT 乙级真题