找出0~100000之间的所有“水仙花数”,这个问题首先我们需要了解什么是水仙花数
知道了规律我们是不是初步可以写出框架了
int main()
{
int num = 0;
//首先得知道num是几位数
for (num = 1; num <= 100000; num++)
{
int count = 0;//位数
while (num != 0)
{
num / 10;
count++;
}
if (count == 3)//水仙花数只能说三位数,所以遍历所有三位数
{
//判断这个三位数的数字是不是水仙花数
}
}
return 0;
}
框架虽然写好了,但是需要思考一个问题,我们现在传给判断函数的num还是原本的num吗?答案是否认的对吧。所以我们要创建一个临时的变量tmp,将让它等于num。
写代码前先介绍一个库函数,用于立方一个数
#include <math.h>
int main()
{
int num = 0;
for (num = 1; num <= 100000; num++)
{
int count = 0;
int tmp = num;
while (tmp != 0)//让临时变量去循环里面变
{
count++;
tmp /= 10;
}
tmp = num;//判断还会改变num吧,那我们就再借用tmp,这样num就不会变化了
if (count == 3)
{
int sum = 0;
for (int i = 1; i <= 3; i++)
{
sum += pow(tmp % 10,count);
//sum += (tmp % 10) * (tmp % 10) * (tmp % 10)这样写也行
tmp = tmp / 10;
}
if (sum == num)
{
printf("%d ", num);
}
}
}
return 0;
}