菜鸟13号 发表于 2021-1-26 09:35:53

while循环中n,s,q的循环怎么理解

#include<stdio.h>

int main(void)
{
    int i, s, n, q;
    for(i = 101; i < 1000; i++)
    {
      s = 0;
      q = i;
      while(q != 0)
      {
            n = q % 10;
            s += n*n*n;
            q /= 10;
      }
      if( s == i)
            printf("%d是水仙花数\n", i);
    }
    return 0;
}

菜鸟13号 发表于 2021-1-26 10:25:43

求求各位大佬百忙之中看看小菜鳥的問題,求解決

jackz007 发表于 2021-1-26 10:45:59

本帖最后由 jackz007 于 2021-1-26 12:41 编辑

#include<stdio.h>

int main(void)
{
    int i, s, n, q;
    for(i = 101 ; i < 1000 ; i ++)         // 从 i = 101 起,到 999 结束,一共循环 899 次
    {
      s = 0;                           // 每次循环初始化 s = 0,准备累加
      q = i;                           // 后面的代码需要使用并修改 i ,让 q 充当 i 的替身,防止 i 被改变
      while(q != 0)                      // 只要 q 不为 0 值就保持循环
      {
            n = q % 10;                  // n = q 的个位数
            s += n*n*n;                  // s 累加 n 的立方(进入 while 前,s 为 0)
            q /= 10 ;                      // q 整体向右移动 1 个十进制位,结果,百位变十位,十位变个位,个位被丢弃
      }
      if( s == i)                        // 如果累加得到的 s 与 循环变量 i 相等
            printf("%d是水仙花数\n", i);
    }
    return 0;
}
    i 是个 3 位数,所以
      q = i;
      while(q != 0)
      {
            n = q % 10;
            s += n*n*n;
            q /= 10 ;
      }
    将会循环 3 次,循环中,n 将依次等于 i 的个位、十位、百位数值,循环结束后,s 的值就是 i 的百位、十位、个位数值的立方和。

心驰神往 发表于 2021-1-26 10:49:26

本帖最后由 心驰神往 于 2021-1-26 17:16 编辑

#

天下有雪 发表于 2021-1-26 12:19:10

学习了。

菜鸟13号 发表于 2021-1-26 15:29:49

谢谢各位大佬的指导,这个问题了解了,谢谢,非常感谢
页: [1]
查看完整版本: while循环中n,s,q的循环怎么理解