PTA乙级刷题日志---1002(20分)写出这个数

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10​100​​。

输出格式:

在一行内输出 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


打卡:2018.10.16(1/5)

猜你喜欢

转载自blog.csdn.net/weixin_38854519/article/details/83142568
今日推荐