1002 写出这个数 (C语言实现)
题目描述:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路:
(1)关于数据类型:n的数值过大不能定义为int型整数或数组(元素过多)直接输入,比较好的思路是定义一个char型的数组str储存输入的数字;
(2)关于输入:10^100的大小为
即1后面有100个0共101位数字,故str元素个数应大于或等于101,在标准输入中无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF,储存读入的字符用到了以下常用做法:
while(scanf("%s",str) != EOF);
(3)关于字符串的转化:字符串转化为整数数值可以采用以下方式
int num=str[i]-'0';
(4)关于求整数各进制位上的数字:
n=num%10;
num=num/10;
(5)关于输出格式:注意最后一个拼音后无空格
(6)可以借鉴的地方:用二维数组pinyin存放了0到9对应的拼音名称,同时将之前求得的各进制位上的数字组成的数组weishu当成数组pinyin的元素大大节省了空间和时间。
AC的代码
// Date:2020/4/29
// Author:xiezhg5
#include <stdio.h>
#include <string.h>
int main(void) {int i,num,sum=0,count=0;int weishu[5];char pinyin[][5]= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};char str[101];//读入字符并转化为整数数值 while(scanf("%s",str) != EOF);for(int i=0; i<strlen(str); i++) {sum=sum+str[i]-'0';}//求进制位上的数字 while(sum!=0) {weishu[count]=sum%10;sum=sum/10;count++;}//格式输出(最后一个拼音后无空格) for(int i=count-1; i>0; i--)printf("%s ",pinyin[weishu[i]]);printf("%s",pinyin[weishu[0]]);return 0;
}
1002 写出这个数 (C语言实现)
题目描述:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
思路:
(1)关于数据类型:n的数值过大不能定义为int型整数或数组(元素过多)直接输入,比较好的思路是定义一个char型的数组str储存输入的数字;
(2)关于输入:10^100的大小为
即1后面有100个0共101位数字,故str元素个数应大于或等于101,在标准输入中无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF,储存读入的字符用到了以下常用做法:
while(scanf("%s",str) != EOF);
(3)关于字符串的转化:字符串转化为整数数值可以采用以下方式
int num=str[i]-'0';
(4)关于求整数各进制位上的数字:
n=num%10;
num=num/10;
(5)关于输出格式:注意最后一个拼音后无空格
(6)可以借鉴的地方:用二维数组pinyin存放了0到9对应的拼音名称,同时将之前求得的各进制位上的数字组成的数组weishu当成数组pinyin的元素大大节省了空间和时间。
AC的代码
// Date:2020/4/29
// Author:xiezhg5
#include <stdio.h>
#include <string.h>
int main(void) {int i,num,sum=0,count=0;int weishu[5];char pinyin[][5]= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};char str[101];//读入字符并转化为整数数值 while(scanf("%s",str) != EOF);for(int i=0; i<strlen(str); i++) {sum=sum+str[i]-'0';}//求进制位上的数字 while(sum!=0) {weishu[count]=sum%10;sum=sum/10;count++;}//格式输出(最后一个拼音后无空格) for(int i=count-1; i>0; i--)printf("%s ",pinyin[weishu[i]]);printf("%s",pinyin[weishu[0]]);return 0;
}