#include#include int main()//求水仙花数 { int a = 0; int mai = 0; for (a = 0; a < 100000; a++) { int b = a; int c = 0; int sum = 0; while (b>0) { c++;//利用c统计a的位数 b/=10; } b = a; while (b > 0) { int ca = (int)pow(b % 10, c);//pow是用来求次方的库函数,其返回值是double类型 sum += ca; b /= 10; } if (sum == a) { printf("%d ", a); mai++; } } printf("找到水仙花数个数为%dn",mai); }
此处我们用到了一个库函数pow,它的作用是求x的y次方。头文件math.h。当然也可以自己写一个函数去实现不必过于纠结。
其返回类型是一个double类型,在使用的过程中要注意, double pow(double x, double y)。
二、变种水仙花数 - Lily Number:把任意的数字,从中间拆分成两个数字,比如1461 可以拆分成(1和461),(14和61),(146和1),如果所有拆分后的乘积之和等于自身,则是一个Lily Number。 例如: 655 = 6 * 55 + 65 * 5 1461 = 1*461 + 14*61 + 146*1 求出 5位数中的所有 Lily Number。#includeint main() { int a=0; for(a=10000;a<100000;a++) { int sum=0; int b=a; int cj=10; while(b>=10) { int k=a%cj; b/=10; sum += k*b ; cj*=10; } if(sum==a) printf("%d ",a); } return 0; }
思路
以12345为例,我们需要求出1*2345+12*345+123*45+1234*5值与12345进行比较,所以我们可以让12345/10得到1234,%10得到5.除以100的到123,模上100的到45.除以1000的到12,模上1000的到345.沿着这个思路我们很简单就可以得到一个代码。然后我们只要加一个循环让它遍历我所想要找的区间就得到了答案。
此题属于简单题,巧用除跟模便可以解决。



