ACM题目 1118: Tom数

题目描述

正整数的各位数字之和被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\n",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\n", sum);
        }
        return 0;
}

  

sum += a[i]-'0';这句话可以将字符转换为数字
现在比如我们要字符‘1’转换成数字1,就这么一个变化,我们看到了大家注意了字符型常量用''括起来的原因是,它们在计算机中都以各自的ASCII表示。
而‘1’的对应编码是49的二进制码,但是我们的数字1,就等于1呀,所以为了由原来的‘1’实际上就是49的二进制变成现在的1对应的二进制1,只好用49-48=1了。


posted @ 2020-09-15 11:03  进寸欢喜  阅读(830)  评论(0编辑  收藏  举报