计算1-1000之间的水仙花数
#include<stdio.h>
#include <math.h>
int main()
{
int i = 0;
for (i = 1; i <= 999; i++)
{
int sum = 0;
int n = 0;
int tmp = i;
while (tmp != 0)
{
n++;
tmp /= 10;//计算i的位数n,
}
tmp = i;//需要提前赋值
while (tmp != 0)
{
sum += (int)pow(tmp%10, n);//为
tmp /= 10;
}
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}
计算水仙花数,需要知道水仙花数的定义,即一个数每一位的n次方(n为该数的数位)然后将每一位的相加的和,即水仙花数,知道水仙花数的定义之后,我们首先用循环列出1-1000的数,然后我们需要知道i的数位,需要创建变量tmp代替i的值,避免在循环内部改变循环变量,可以利用除10运算,但是我们需要把n++放在除10运算之前,因为除10循环进行到个位时,结果为0,跳出该循环,此时n恰好为i的数位 。
第二步需要对变量进行水仙花数的计算,此时我们需要提前将i赋给tmp(否则没有实际的值对tmp判断),应用pow库函数,进行次方运算,先将i进行模10运算,得到个位数,然后进行除10运算进行消位操作,创建sum变量接收它们的和即可,从而得到每一位的n次方相加的形式。
最后进行判断,若sum==i,则i为水仙花数,输出水仙花数
i。