青青菜菜又来了,这几天也一直在做题哟
问题描述
给定一个十进制整数n,输出n的各位数字之和。
输入格式
输入一个整数n。
输出格式
输出一个整数,表示答案。
样例输入
20151220
样例输出
13
样例说明
20151220的各位数字之和为2+0+1+5+1+2+2+0=13。
评测用例规模与约定
所有评测用例满足:0 ≤ n ≤ 1000000000。
代码
代码如下(示例):
/*201512-1 数位之和*/
#include<stdio.h>
int main()
{
int n,out_num;
scanf("%d",&n);
while(n)
{
out_num+=n%10;
n=n/10;
}
printf("%d",out_num);
return 0;
}
问题总结分析
字符(char/string)与整型(int)的相互转换(类型及实例)
- 字符型(char)转整型(int)
char c = '6'; //字符型 c = '6'
int num = c - '0'; //转换结果:num = 6
/*这个地方为啥一定是要减呢,不懂,我试了试加,不行,会输出102,
这是为啥呢???*/
/*在本题的第二种解法中,我们定义了一个字符型数组,我们在计算最后结果时,
也是需要字符型转整型*/
- 整型(int)转字符型(char)
int num = 5; //整型 num = 5
char c = num + '0'; //转换结果:字符型 c = '5'
//这里同样也是换了运算就不行了 为啥呢??
c语言字符串输入
C语言有多个函数可以从键盘获得用户输入,它们分别是:
scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
getchar()、getche()、getch():这三个函数都用于输入单个字符。
gets():获取一行数据,并作为字符串处理。
输入单个字符
- getchar()
最容易理解的字符输入函数是 getchar(),它就是scanf("%c", c)的替代品,除了更加简洁,没有其它优势了;或者说,getchar() 就是 scanf() 的一个简化版本。
#include <stdio.h>
int main()
{
char c;
c = getchar();
printf("%c\n", c);
return 0;
}
//缩写 char c = getchar();
输入字符串
输入字符串当然可以使用 scanf() 这个通用的输入函数,对应的格式控制符为%s
这里介绍gets() 这个专用的字符串输入函数,它拥有一个 scanf() 不具备的特性。
#include <stdio.h>
int main()
{
char author[30], lang[30], url[30];
gets(author);
printf("author: %s\n", author);
gets(lang);
printf("lang: %s\n", lang);
gets(url);
printf("url: %s\n", url);
return 0;
}
gets() 是有缓冲区的,每次按下回车键,就代表当前输入结束了,gets() 开始从缓冲区中读取内容,这一点和 scanf() 是一样的。gets() 和 scanf() 的主要区别是:
scanf() 读取字符串时以空格为分隔,遇到空格就认为当前字符串结束了,所以无法读取含有空格的字符串。
gets() 认为空格也是字符串的一部分,只有遇到回车键时才认为字符串输入结束,所以,不管输入了多少个空格,只要不按下回车键,对 gets() 来说就是一个完整的字符串。
也就是说,gets() 能读取含有空格的字符串,而 scanf() 不能。