读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100 。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
解题思路
1.建立一个字符串数组,下标分别对应拼音,如0->ling.
2.用字符数组存储数字
3.逆序求和结果的数字,因为是从高位开始输出拼音。但这里要注意如果结果是10,逆序后是0,因此为了不漏掉0,应该记录输出的总次数,总数次减去逆序输出的次数,剩下的就是漏掉的0应该输出的次数了。
#include<stdio.h>
int main(){
char a[100]; // 接收数字
char str[10][5]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"}; // 用于输出拼音,下标对应拼音
int i=0, sum=0, flag=1, temp=0; // flag用于判断是否是第一次输出
int cnt = 0;
scanf("%s",a);
for(;a[i]!='\0';i++){
sum += (a[i]-'0'); // 得到数字和
}
while(sum!=0){ // 将数字逆序
temp *= 10;
temp += sum%10;
sum /= 10;
cnt++;
}
sum = temp;
while(sum!=0){
i = sum%10; // 得到最低位的数字
sum /= 10;
if(flag){
printf("%s", str[i]);
flag = 0; // 别忘了置零
cnt--; // 记录应该输出的总次数
}
else{
printf(" %s", str[i]); // 后面的输出都在前面输出空格,这样最后一次输出后面就不会有空格了
cnt--;
}
}
while(cnt--){
printf(" %s", str[0]); // 输出漏掉的零
}
return 0;
}