编写程序,求自然数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。具体如上图所示。
(解析为作者本人见解,仅供参考。如有问题,请联系作者本人或在评论区纠正讨论,谢谢大家)