循环结构习题:自然数n的各位数字之和

编写程序,求自然数n的各位数字之和,其中n的值由键盘输入。
【输入形式】
输入仅一行,输入n的值。
【输出形式】
输出仅一行,输出相应的和值。
【样例输入】100

【样例输出】sum=1

【答案】

#include<stdio.h>
#include<string.h>
int main()
{
    int i,sum,n,t;
    char ch[100];  //定义输入的自然数为一个字符串
    scanf("%s",ch);
    n=strlen(ch);   //测量输入字符串共有多少位数
    for(i=0,sum=0,t=0;i<n;i++)
    {
        t=ch[i]-48;  //查看ASCII代码对照表找到每一个数字对应的代码,并将其转化为对应数字
        sum=sum+t;
    }
    printf("sum=%d",sum);
    return 0;
}
    

【解析】此题的题目只是说输入自然数n,没有告诉输入的自然数是多大,所以在这里我们很难判断输入的值。那我们换个思路,不管输入多大的数,我们都可以将其看为一串字符串,并定义字符串的长度为一个比较大的值,这样就可以把自然数概括到里面了。又因为我们要把输入的自然数的每一位数字相加得到sum,我们需要知道这个自然数的位数,也要将其相加,这时我们就可以用字符数组strlen函数(测量字符串长度的函数),并且将每个数字单独拿出来相加,从而得到这个自然数的和值sum。在此题中,我们要注意的是当我们把每一个数字看成字符输入并利用时,在计算和值中我们要把每一个字符串数字的ASCII代码转化为所对应的相应数字,即:1的ASCII代码是49,在计算t=ch[i]-48中,当ch[i]所表示的是字符1时所对应的代码是49,在此表达式中代入的就是49,我们要想办法将49转化为1,所以在ch[i]后面减48,此时的t就是输入对应字符串所对应的数字1。具体如上图所示。

(解析为作者本人见解,仅供参考。如有问题,请联系作者本人或在评论区纠正讨论,谢谢大家)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值