C语言上机试题之求各位之和
2020-03-28 20:03
886 查看
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 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,采取的办法是换成字符型存储。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 2012届华为上机试题之C语言-排序
- 2012届华为上机试题之C语言-排序
- 2013年华为c语言上机试题3
- 2013年华为c语言上机试题2
- [源码和文档分享]基于java的C语言试题生成与考试系统
- 蓝桥杯 2011年第二届C语言初赛试题(4)
- ITAT第五届C语言初赛试题(附答案)
- C语言编程小练习-求各位数字之和
- 厦大C语言上机 1389 简单的统计
- 厦大C语言上机 1377 寻书之旅1
- C语言 上机课练习题
- 厦大C语言上机 1378 寻书之旅2
- 厦大C语言上机 1425 字符串的增添
- 【学习ios之路:C语言】循环方面试题
- 第十四周-C语言 oj上机题目(数组逆序)
- 【华为2014上机试题】设计一个定时器管理系统
- C语言模拟试题3
- 软件设计师1990年下午试题7(C语言)
- C语言上机题.来,练练吧。
- 北阳电子_C语言_面试试题