C语言问题求助

C语言问题求助程序填空,该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6答案我知道是if(n<0)n=-n;和s=s+n%10就是想知道原... C语言问题求助程序填空,该程序功能:求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6
答案我知道是 if(n<0)n=-n;和s=s+n%10 就是想知道原因和过程
展开
 我来答
Frank_Zhou991
推荐于2017-12-16 · TA获得超过421个赞
知道小有建树答主
回答量:385
采纳率:88%
帮助的人:203万
展开全部
#include <stdio.h>

/* 程序入口 */
int main (void )
{
int n, /* n中存放你输入的数 */
s; /* s中存放各位想加的和 */

/* 先从命令行读取一个整数,存入n */
scanf ("%d", &n);

/* 如果读取的整数是负数,负负得正,通过负号把它变成对应的相反数 */
/* 如果没有经过这一步处理,n仍然是负数,那么在取余数运算的时候余数是负数 */
/* 把负数加到和s里结果自然不正确 */
if (n < 0) n = -n;

/**
* 当n不等于0的时候,循环继续
* 因为n值会在循环体中被不停地改变,最终会变成0 */
*/
while (n != 0)
{
/* 通过取模运算,求得n除以10的余数,也就是n现在的个位数 */
/* 如 n = 327,那么n除以10的商是32,余数是个位数字7 */
s = s + n % 10;

/* 在C中,int整形变量除以int整形变量时,会把得到的结果的小数部分直接去掉,所以商是整数 */
/* 327除以10的准确结果是32.7,小数部分被去掉后,结果就是32 */
/* 再把这个商赋给n作为新的n值,这就使n去掉了原来的个位,百位和十位和向个位移动,变成了两位数 */
/* 327 / 10的结果是它原来的百位和十位上的数字组成的两位数32 */
n = n / 10;

/* 接着进行下一次循环,把n的个位数字拿出来加进总和s中 */
/* n又从两位数变成一位数 */
/* 下一次循环的时候,由于n % 10就是n自身 */
/* n / 10的结果是0,0作为n的新值,下一次n!=0判断的时候不成立,循环结束 */
}

printf ("%d\n", s);

return 0;
}

/* 如果有哪里不懂,欢迎追问。*/
1223永远不弃
2016-12-04 · TA获得超过356个赞
知道小有建树答主
回答量:216
采纳率:57%
帮助的人:106万
展开全部
n%10取余得到一个数的个位数,负数的话得到的个位数是负数,所以要转化为正的
更多追问追答
追问
还有吗
有没有具体点的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式