求出0~100000之间的所有“水仙花数”并输出。
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。
#include#include // 打印水仙花数(水仙花数的变种) // 求出0~100000之间的所有“水仙花数”并输出。 // “水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如 : 153=1 ^ 3+5 ^ 3+3 ^ 3,则153是一个“水仙花数”。 int main() { for (int i = 0; i < 100000; i++) { // 判断i是不是“水仙花数” // 1.计算i是几位数 -> n位 int n = 1; //i的数值任何一位都最少是1位 int temp = i; double sum = 0; while (temp/10) // 判断条件 { n++; temp /= 10; // 计算赋值 } // 2.判断i每一位,计算他的n次方之和 temp = i; while (temp) { sum += pow(temp % 10, n); // 每一位的和相加等于数值本身。 temp /= 10; } if (sum == i) { printf("%d ",i); } } return 0; }
运行测试:
备注介绍一下pow函数:
C 库函数 - pow() 描述C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 xy。
声明下面是 pow() 函数的声明。
double pow(double x, double y)参数
- x -- 代表基数的浮点值。
- y -- 代表指数的浮点值。
返回值
该函数返回 x 的 y 次幂的结果。



