题目描述
正整数的各位数字之和被Tom称为Tom数。求输入数(<2^32)的Tom数!
输入
每行一个整数(<2^32).
输出
每行一个输出,对应该数的各位数之和.
样例输入
12345
56123
82
样例输出
15
17
10
思路:
开始时想到将整个字符串放到数组中存储起来
后来发现这样不太可行
于是巧妙的利用了取余和整除的方法去计算
代码1:(巧妙利用取整取余的方法)
#include<stdio.h>
int main()
{
long sum,n;//long型为长整型
sum=0;
while ((scanf("%ld",&n))!=EOF)//可以一直输入数据
{
while(n!=0)
{
sum=sum+n%10;
n=n/10;
}
printf("%ld
",sum);
sum=0;
}
return 0;
}
代码2:(利用字符串数组的形式)
#include <stdio.h>
#include <string.h>
int main()
{
char a[11]; //2^32=4294967296共10位
while(gets(a)!=NULL){
int sum = 0, i;
for(i=0;i<strlen(a);i++)
sum += a[i]-'0';
printf("%d
", sum);
}
return 0;
}
sum += a[i]-'0';这句话可以将字符转换为数字
现在比如我们要字符‘1’转换成数字1,就这么一个变化,我们看到了大家注意了字符型常量用''括起来的原因是,它们在计算机中都以各自的ASCII表示。
而‘1’的对应编码是49的二进制码,但是我们的数字1,就等于1呀,所以为了由原来的‘1’实际上就是49的二进制变成现在的1对应的二进制1,只好用49-48=1了。