站长必备网站,重庆云阳网站建设公司,深圳seo优化外包,wordpress同城插件今天让我们来看看变种的水仙花吧#xff0c;话不多说#xff0c;直入主题。 题目描述 变种水仙花数- Lily Number: 把任意的数字#xff0c;从中间拆分成两个数字#xff0c;比如1461可 以拆分成(1和461)#xff0c;(14和61)#xff0c;(146和1),如果所有拆分后的乘积之和… 今天让我们来看看变种的水仙花吧话不多说直入主题。 题目描述 变种水仙花数- Lily Number: 把任意的数字从中间拆分成两个数字比如1461可 以拆分成(1和461)(14和61)(146和1),如果所有拆分后的乘积之和等于自身则这个数是一个Lily Number。 例如: 6556*5565*5 1461 1*46114*61 146*1 求出5位数中的所有 Lily Number。 输入描述 无 输出描述 一行五位数中所有的Lily Number,每两个数之间隔一个空格。 题目分析 我们想要求变种水仙花数-Lily Number根据例子和题目要求我们需要将一个五位数分为四个组合如图 我们将一个五位数分为了左右两个部分那么我们如何使13145这个五位数变成如图所示的样子之后相乘呢。我们发现取模和除可以帮我们达成目的。 在13145/10000之后得到结果为113145/1000之后结果为13符合我们预期计算正确之后13145%10000之后可以得到3145意思就是13145%10000之后得到的余数是3145这样是不是比较简单明了。之后依次取模递减余数也变小得到结果符合预期。 我们有思路啦之后我们写代码将它们乘起来之后相加之后判断乘得的结果是否与五位数相等得到我们的变异水仙花数。 代码实现 #define _CRT_SECURE_NO_WARNINGS 1
#includestdio.h
#includemath.h
int main()
{int i;for (i 10000;i 99999;i){int j;int sum 0;for (j 1; j 4; j){int k (int)pow(10, j);sum (i % k) * (i / k);}if (sum i){printf(%d , i);}}return 0;
} 代码分析 我们首先根据题目要求定义i的值为10000~99999遍历之后我们就要对每个数进行拆解了。首先我们知道逐步拆解的过程是让i逐渐取模或者/10000100010010那么我们要实现这个过程就可以将它们看为i*10^1,i*10^2,i*10^3,i*10^4,这样我们只需要调用四次pow函数就可以实现逐步取模和除的过程。 我们定义一个变量k来接收pow函数计算的值之后定义一个sum接收它们相乘得到的数判断sum与i是否相等如果相等那么这个数就是变异水仙花数。 其中要注意我们在计算sum的时候使用来将i%k与i/k的值相加起来sum是它们各个组合相乘之后再相加的和。 运行结果 结果验证 我们得到的变异水仙花数有五个我们挑选其中一个来验证一下 2*361023*610236*102360*0 结果正确求得变种水仙花数Lily Number共有5个。