输出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的值,实质上就是个位上的值。
- 输出1-100之间符合如下条件的数:该数的各位数之乘积大于各位数之和(循环嵌套)
- 求100的阶乘各位数之和
- 求两个数之间的素数+一个数的各位之和+判断回文数
- 输出满足各位数之和被23整除的数(难度:半颗星)
- 各位数之和
- 分离各位数之和
- 计算一个数的各位之和
- 一个整数的各位数之和
- 计算一个整数的各位数之和
- 数,各位上的数最大值和最小值的乘积
- 输入一个数,求这个数的各位数字之和
- 求各位数之和为5的数
- Java-求出所有的水仙花数(各位数字立方之和等于数本身的三位整数)并输出。
- 【HUSTOJ】1006: 各位数之和
- 1、任意输入一个4位正整数,调用函数(函数自定义)输出该正整数数的各位数 字组成的最大数。
- 求一个数各位数之和
- 输出0~999之间的所有“水仙花数”ps:“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身
- 打印出100-999之间的数所有的“水仙花数”。。所谓水仙花数,就是指3位数,其各位数字立方和等于该数本身。
- mysql替换回车、换行符
- 用nmake来编译,问环境变量怎么设置
- HDU 2203 KMP
- [SqlServer02]-数据库优化及管理常用命令
- Search in Rotated Sorted Array
- 输出1-100之间符合如下条件的数:该数的各位数之乘积大于各位数之和(循环嵌套)
- 11/09/2014 筛选特征新想法
- oracle提交了之后就不能回滚么?
- 稳定排序和不稳定排序(转载)
- Best Time To Buy And Sell Stock
- Billboard - HDU 2795 线段树
- 【C语言基础】C语言第七章
- 集线器,交换机,路由器。。
- Undefined exploded archive location Tomcat之项目不能发布