读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
1234567890987654321123456789
yi san wu
一开始想到用int类型来存储n,但发现n的范围是10100,int的取值范围为+-2×10的9次方的,超过了int类型,long long也仅仅为9×10的18次方,也会溢出.所以要使用字符串处理.
这里不能用字符数组来一位一位地存储,否则占用的空间太大了,所以应该读一位存一位,用到getchar函数,结束条件为 输入==‘\n‘
代码如下:
#include<bits/stdc++.h> using namespace std; int main(){ char ch; int sum=0; while((ch=getchar())!=‘\n‘){ sum=sum+ch-‘0‘; } char str[50]; sprintf(str,"%d",sum); switch(str[0]){ 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; case ‘0‘:cout<<"ling"; break; } for(unsigned int i=1;i<strlen(str);i++){ switch(str[i]){ 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; case ‘0‘:cout<<" ling"; break; } } }
参考链接:https://blog.csdn.net/weifenglin1997/article/details/78702362,十分感谢
原文:https://www.cnblogs.com/CrossingX/p/10861631.html