啊哈磊_编程从这里起步

标题: 请教大神 [打印本页]

作者: 幻想hacker,,,    时间: 2018-9-24 20:25
标题: 请教大神
1.输入一个三位数求,这个数的个位、十位、百位数之和   例如输入123  打印5
2.输入一个n位数范围在1-99999999之间,就这个n位数没一位上的数之和;  例如输入12  打印3   输入23456  打印20

作者: 蓝天之子    时间: 2018-9-24 20:54
以下程序代码,上面条件1和2都可以满足了。顺便说一下,输入123是输出6而不是5哦。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     int n,s=0;
  6.     printf("请输入一个数(1-99999999):");
  7.     scanf("%d",&n);
  8.     while(n>0)
  9.     {
  10.         s=s+n%10;
  11.         n=n/10;
  12.     }
  13.     printf("%d\n",s);
  14.     system("pause");
  15.     return 0;
  16. }
复制代码

作者: 幻想hacker,,,    时间: 2018-9-24 23:37
本帖最后由 幻想hacker,,, 于 2018-9-24 23:41 编辑
蓝天之子 发表于 2018-9-24 20:54
以下程序代码,上面条件1和2都可以满足了。顺便说一下,输入123是输出6而不是5哦。

大哥  我有点不懂  能不能注释下 或者解释下        那个n=n/10  有什么作用  如果n是123的话s不是等于3吗   拜托解释下


作者: 蓝天之子    时间: 2018-9-25 07:09
while循环里,每一次的 s=s+n%10 模运算就会取得n的个位的数值,把它累加至 s 上, 然后 n=n/10,n除以10就是它缩小10倍且取整就相当于抽掉该数的个位数,原十位变个位、百位变十位 ... 直到全部抽掉后循环结束。

代码这么少这么简单,自己加个printf来逐步观赛和数的变化不就很容易理解么。
作者: 幻想hacker,,,    时间: 2018-9-25 23:08
蓝天之子 发表于 2018-9-25 07:09
while循环里,每一次的 s=s+n%10 模运算就会取得n的个位的数值,把它累加至 s 上, 然后 n=n/10,n除以10就 ...

还是不懂    最后printf输出的是s,那while循环中的n=n/10有什么作用呢?


作者: 蓝天之子    时间: 2018-9-26 08:49
已经讲得足够清楚了,慢慢体会吧,不明白的话自己再在每一步之后加printf语句来观察各个数的变化。

C语言里的表达式里=号是赋值,s=s+10是用s原来的值加上10然后再赋给s。不是数学里的等于,数学里s=s+10不会成立的。




欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/) Powered by Discuz! X3.2