搜索
查看: 432|回复: 5
打印 上一主题 下一主题

请教大神

[复制链接]
跳转到指定楼层
楼主
 楼主| 发表于 2018-9-24 20:25:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
1.输入一个三位数求,这个数的个位、十位、百位数之和   例如输入123  打印5
2.输入一个n位数范围在1-99999999之间,就这个n位数没一位上的数之和;  例如输入12  打印3   输入23456  打印20

楼主新帖
楼主热帖
沙发
发表于 2018-9-24 20:54:24 | 只看该作者
以下程序代码,上面条件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. }
复制代码
板凳
 楼主| 发表于 2018-9-24 23:37:40 | 只看该作者
本帖最后由 幻想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:45 | 只看该作者
while循环里,每一次的 s=s+n%10 模运算就会取得n的个位的数值,把它累加至 s 上, 然后 n=n/10,n除以10就是它缩小10倍且取整就相当于抽掉该数的个位数,原十位变个位、百位变十位 ... 直到全部抽掉后循环结束。

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

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

6#
发表于 2018-9-26 08:49:00 | 只看该作者
已经讲得足够清楚了,慢慢体会吧,不明白的话自己再在每一步之后加printf语句来观察各个数的变化。

C语言里的表达式里=号是赋值,s=s+10是用s原来的值加上10然后再赋给s。不是数学里的等于,数学里s=s+10不会成立的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表