飞道的博客

C语言上机试题之求各位之和

555人阅读  评论(0)

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

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

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

1234567890987654321123456789

输出样例:

yi san wu

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

void print1(char s[],int l){

	for(int k=l-1;k>=0;k--){
	
		switch(s[k]){
		
	 	    case '0':printf("ling");
			break;
			case '1':printf("yi");
			break;
			case '2':printf("er");
			break;
			case '3':printf("san");
			break;
			case '4':printf("si");
			break;
			case '5':printf("wu");
			break;
			case '6':printf("liu");
			break;
			case '7':printf("qi");
			break;
			case '8':printf("ba");
			break;
			default:printf("jiu");
			break;
		}
		if(k>0)
			printf(" ");
	}

}

int main(){
	char s[101];
	char s2[100];
	gets(s);
	int l=strlen(s);
	if(l==0 || l>100)
		return 0;
	else if(s[0]=='0')
		return 0;
	int n=0;
	int i;
	int sum=0;

	for(i=0;i<l;i++){
	
		n+=s[i]-'0';
	}
    i=0;		
	while(n)
	{		
	s2[i++]=n%10+'0';
	n=n/10;
	}

print1(s2,i);
	
return 0;
	
}

这道题做了很长时间,主要原因还是太菜了。卡在以下几点:第一是字符和字符数组以及字符串的输出输入问题没搞明白;第二是需要使用某个整型或者字符等类型数组的长度,在建立这个数组的时候需要指定长度,这个值应该设置为多少;第三是类似于700这样的数字如何将位置倒过来变成007。
第一个和第二个问题后面再讨论,先总结下第三个问题。在本题中第三个问题产生的背景是要将一个数每个位都提取出来,然后换成中文拼音,我想到的方法是将这个数按位倒置转换,每个位用数组保存,然后倒序输出数组。遇到的第一个问题,倒序输出数组的时候要知道这个数组的长度,数组的长度是运行过程中根据这个整数的位数决定的,但是定义数组的时候又要指定长度。后来想到一个办法,在提取这个数每个位的循环中自增某个初始值为0的变量,变量最后的值就是数组的长度。然后遇到的第二个问题是按照一般转换回文数的那个公式,会忽略掉0的情况,比如700,转换后就是7,而我们要的是007,采取的办法是换成字符型存储。


转载:https://blog.csdn.net/weixin_45433525/article/details/104639539
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场