读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路:
- 输入一个数后,先要计算它的各个数的和。
- 如果使用整型来处理会非常麻烦,我弄了半天,后面有一个死胡同怎么也走不出去,也是头铁....
- 然后看了下别人的思路,才知道有方法可以计算字符各位数的和。
- 计算出和后,翻译成相应的拼音。
- 采用循环除10再取余将各个数得到并存在一个数组中。
- 翻译成拼音时有个技巧。因为数组中存的是0-9的数,像我这种小白一定会遍历数组,每次遍历用一次switch-case。但是可以定义一个翻译元数组(我取的名字...),将取余完成后得到的数组中的数作为翻译数组的索引就行了。
- 之前也考虑过每取一次余便输出一个数,因为我的算法是先取余得到个位数再除10,但是,这样是反的....如果先得到最大位数......emmm...很麻烦吧,比如,要先知道这个数有几位.......。
代码:
#include<stdio.h>
#include<string.h>
#include <stdlib.h>
void print_sum(int n){
char *name[] ={"ling","yi","er","san","si","wu","liu","qi","ba","jiu","shi"};
int a[10];//存储sum每位的数
int i=0;
for(i=0;n>=10;i++){
a[i]=n%10;
n=n/10;
}
a[i++]=n;//先赋值再加
while(i--){ //先判断再减
if(i!=0){
printf("%s ",name[a[i]]);//将数作为下标的到相应的字符
}else{
printf("%s\n",name[a[i]]);
}
}
}
int main(){
char s[100];
char *n=s;
scanf("%s",s);
int sum=0;
//用字符计算总和。
while(*n!='\0'){
sum=sum+(*n-'0');
n++;
}
print_sum(sum);
}
参考:https://blog.csdn.net/u012792707/article/details/51730015