【C语言】1002 写出这个数 :读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

  • Post author:
  • Post category:其他


题目:

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

输入格式:

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

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

代码实现:

#include<stdio.h>
#include<string.h>

int main(){
	
	int sum=0;
	/*【法1】读入一个正整数 n,计算其各位数字之和
	char ch;
	ch=getchar();
	while(ch!='\n'){
		switch(ch){
			case '1':sum+=1;
			         break;
			case '2':sum+=2;
					 break;
			case '3':sum+=3;
			         break;
			case '4':sum+=4;
					 break;
			case '5':sum+=5;
					 break;
			case '6':sum+=6;
					 break;
			case '7':sum+=7;
					 break;
			case '8':sum+=8;
					 break;
			case '9':sum+=9;
		}
		ch=getchar();
	}
	printf("%d",sum);
	*/
	//【法2】 
	char x[100];
	int i;
	scanf("%s",x);
	for(i=0;x[i]!='\0';i++){
		sum+=(x[i]-'0');
	}
	//printf("%d\n",sum);
	
	//用汉语拼音写出和的每一位数字
	int y;
	char arr[10][10];
	i=0;//记录每位数字顺序,后逆序输出 
	while(sum){
		y=sum%10;
		switch(y){
			case 0:strcpy(arr[i],"ling");break;
			case 1:strcpy(arr[i],"yi");break;
			case 2:strcpy(arr[i],"er");break;
			case 3:strcpy(arr[i],"san");break;
			case 4:strcpy(arr[i],"si");break;
			case 5:strcpy(arr[i],"wu");break;
			case 6:strcpy(arr[i],"liu");break;
			case 7:strcpy(arr[i],"qi");break;
			case 8:strcpy(arr[i],"ba");break;
			case 9:strcpy(arr[i],"jiu");break;
		}
		i++;
		sum/=10;
	}
	i--;//最后多加1再减去,还原 
	//拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格
	for(;i>0;i--)
		printf("%s ",arr[i]);
	printf("%s",arr[0]);
	
	return 0;
}

小结:

  1. 输入数据过大时可以考虑用字符串转换;
  2. VC6.0++不支持long


    long 整型;
  3. 单独数字如:10,在编译器中默认整型(int),10L为长整型;
  4. 存放字符串可以考虑二维数组。



版权声明:本文为xiaoyeren_ITRoad原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。