您的位置:首页 > 编程语言 > C语言/C++

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

2020-03-28 20:03 886 查看

读入一个正整数 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,采取的办法是换成字符型存储。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
不愿当码农 发布了14 篇原创文章 · 获赞 0 · 访问量 320 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: