鱼C论坛

 找回密码
 立即注册
查看: 2223|回复: 5

[已解决]while循环中n,s,q的循环怎么理解

[复制链接]
发表于 2021-1-26 09:35:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}
最佳答案
2021-1-26 10:45:59
本帖最后由 jackz007 于 2021-1-26 12:41 编辑
  1. #include<stdio.h>

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

    i 是个 3 位数,所以
  1.         q = i;
  2.         while(q != 0)
  3.         {
  4.             n = q % 10;
  5.             s += n*n*n;
  6.             q /= 10 ;
  7.         }
复制代码

    将会循环 3 次,循环中,n 将依次等于 i 的个位、十位、百位数值,循环结束后,s 的值就是 i 的百位、十位、个位数值的立方和。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-26 10:25:43 | 显示全部楼层
求求各位大佬百忙之中看看小菜鳥的問題,求解決
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-26 10:45:59 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-1-26 12:41 编辑
  1. #include<stdio.h>

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

    i 是个 3 位数,所以
  1.         q = i;
  2.         while(q != 0)
  3.         {
  4.             n = q % 10;
  5.             s += n*n*n;
  6.             q /= 10 ;
  7.         }
复制代码

    将会循环 3 次,循环中,n 将依次等于 i 的个位、十位、百位数值,循环结束后,s 的值就是 i 的百位、十位、个位数值的立方和。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-26 10:49:26 | 显示全部楼层
本帖最后由 心驰神往 于 2021-1-26 17:16 编辑

#
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-1-26 12:19:10 | 显示全部楼层
学习了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-26 15:29:49 | 显示全部楼层
谢谢各位大佬的指导,这个问题了解了,谢谢,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 16:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表