1002. 写出这个数 (20)
2018-01-27 11:52:47
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
路:
1、<string.h>是字符串头文件,比如说用strlen()就得是在<string.h>库中包含。
2、一维数组char n[3]指的是n是无数据的,n是一个可以存储3个字符的一维字符数组
3、二维数组:二维数组优先按行存储
比如:a[2][3]:a[0][0] a[0][1] a[0][2]
a[1][0] a[1][1] a[1][2]
那么按行排列的结果是a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
4、字符'0':char c = '0'; 它的ASCII码实际上是48。内存中存放表示:00110000
这里面字符'0'的作用一般是将字符型的转化为整数型,比如说char n[1]='1' int i=n[1]-'0' 这样i为1
字符'\0' : ASCII码为0,表示一个字符串结束的标志。这是转义字符。
整数0 :ASCII码为0,字符表示为空字符,NULL;数值表示为0;内存中表示为:00000000
5、scanf和gets区别:
(1)scanf()可以同时接受多个字符串,而gets()一次只能接受一个字符串
(2)scanf()可以不能接受带空格的字符串,而gets()能接受带空格的字符串。
(3)scanf()不能接受长度为0的字符串,会自动忽略开头的所有空格,并且以空格、换行符、回车结束输入。而gets()能接受长度为0的字符串,
不会自动忽略开头的所有空格或回车,并以回车结束。
6、如果要让输出带空格的话,在“%d ”引号里面呢加入空格
#include<stdio.h> #include<string.h> int main() { char n[101]; // 能容纳101个字符,因为包含\0 int i,s,sum=0,j=0; int result[3]; // 即使每位字符的数值都是最大数9,那么相加的总和最多也就是900,所以result最多只有三位 char py[10][5]={"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"}; scanf("%s",&n); //gets(n); // 因为一维数组无数据,所以要取得,这里面scanf和gets看上面 //第一步:算出每个字符数值的总和 for(i=0;i<strlen(n);i++){ sum+=n[i]-'0'; } // printf("%d",sum); //第二部:找出总和的每个字符数值 while(sum){ // 要想循环的条件是sum不为0 result[j++]=sum%10; sum/=10; } //第三步:循环输出result for(s=j-1;s>0;s--){ printf("%s ",py[result[s]]); } printf("%s",py[result[0]]); return 0; }