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

来源:互联网 发布:淘宝越墙vans是正品吗 编辑:程序博客网 时间:2024/06/05 11:06


程序如下:

#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的值,实质上就是个位上的值。


0 0
原创粉丝点击