输出1-100之间符合如下条件的数:该数的各位数之乘积大于各位数之和(循环嵌套)



程序如下:

#include<stdio.h>
void main()
{
 int n,k=1,s=0,m,t;
 for(n=1;n<=100;n++)
 {
  k=1;s=0;m=n;
  while(m)
  {
   t=m%10;
   k=k*t;
   s=s+t;
   m=m/10;
  }
  if(k>s)
  printf("%d\n",n);
 }
}

程序思想:

        这个for和while的嵌套循环差点把我绕死,还是请教了高手才知道。

       先看第四行定义变量,n为1-100中的数,k为乘积,s为和,m是n赋给它的值,t为个位,现在来说说这个程序的编程思想:t=m%10;所以t为个位,现在先来举个例子,比如n=9,m就为9,现在来看while循环,现在先来判定while(m),m为9,不为0,为真,就开始执行下去,如果m为0的话,就要跳出while循环进行下一个数的判定,现在先取各位上的数,m%10为8;k的初始值为1;k=k*t=8,s的初始值为0,s=s+t=8,不要奇怪这里为啥要累乘和累加,这里为第二次循环做准备,因为这里取的是个位的数,还要取十位的数,这时取十位上的数,m=m/10后,m=0; 因为m=0,所以要跳出while循环,这时比较k和s的大小,然后进行下一个数的判定。这时n=10;m=n=10;现在先来判定while(m),m=10,不为0,为真,就开始执行下去,现在先取各位上的数,m%10为0;k的初始值为1;k=k*t=0,s的初始值为0,s=s+t=0,上面已说到这里的累积和累乘是为第二次循环做准备,现在取十位的数,m=m/10后,m=1;为真,所以继续执行下去,然后再用m%10,这时的t=1;k=0*1=0,s=0+1=1;这时的0和1就是个位和十位上的数,这时就得到一个数各位的乘积与和的值,m=m/10,m=0,为假,跳出循环,比较乘积k与和s的大小,然后再进行下一个数的判定,如此循环,直到超过所要求的条件,然后输出结果。

      这个程序的while里的循环就是在判定while条件为真后,第一次循环先取出个位上的数,分别与k的初始值相乘和与s的初始值相加,然后再分别赋给k和s,其实这时得到的k和s的值都是个位上的数值,然后再算m=m/10得到m的值,得到的值,再来用于while的判定,如果不为零,就继续执行,然后再来取十位上的数,取到后再与k相乘和s相加,得到各位上的乘积与各位上的和,因为第一次循环得到的k,s的值,实质上就是个位上的值。


  • 21
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值