程序要求:
1、求数字0-999之间的所有水仙花数,并在屏幕输出
解析思路:
1、“水仙花数”:指一个N(N≥3)位的数字,其各位的数字N(位数)次方之和刚好等于数字本身。(如:153 = 1^3 + 5^3 + 3^3)
2、程序要求数字为0-999,“水仙花数”至少≥3位。因此先进行一个判断,满足要求才开始进行计算。
if (i > 99) //当数字满足位数要求才开始计算
3、将数字的每一位数分离出来,给到3个变量
a = i / 100; //分离出百位数 b = (i / 10) % 10; //分离出十位数 c = i % 10; //分离出个位数
4、计算各位数字之立方和,并判断是否与数字相等
方法一:在主函数直接计算并判断
//主函数内
if (i = a * a * a + b * b * b + c * c * c)
{
printf("%d ", i);
}
方法二:创建一个立方计算函数fun_3来计算每位立方值,并在主函数内进行判断
//立方计算函数
int fun_3(int m)
{
int cube = m * m * m; //计算传入数的立方值
return cube; //返回计算的值
}
//主函数内
if (i = fun_3(a) + fun_3(b) + fun_3(c))
{
printf("%d ", i);
}
方法三:使用立方计算库函数pow(需调用头文件math.h)
//主函数内
if (i == pow(a, 3) + pow(b, 3) + pow(c, 3))
{
printf("%d ", i);
}完整代码:
/* 方法一 */
//头文件
#include <stdio.h>
//主函数
int main()
{
int i = 0;
int a = 0, b = 0, c = 0;
for (i = 0; i < 1000; i++)
{
if (i > 99)
{
a = i / 100; //百位
b = (i / 10) % 10; //十位
c = i % 10; //个位
if (a * a * a + b * b * b + c * c * c == i)
{
printf("%d ", i);
}
}
}
}
/* 方法二 */
//头文件
#include <stdio.h>
//立方计算函数
int fun_3(int m)
{
int cube = m * m * m; //计算立方值
return cube; //返回计算的值
}
//主函数
int main()
{
int i = 0;
int a = 0, b = 0, c = 0;
for (i = 0; i < 1000; i++)
{
if (i > 99)
{
a = i / 100; //百位
b = (i / 10) % 10; //十位
c = i % 10; //个位
if (fun_3(a) + fun_3(b) + fun_3(c) == i)
{
printf("%d ", i);
}
}
}
}
/* 方法三 */
//头文件
#include <stdio.h>
#include <math.h>
//主函数
int main()
{
int i = 0;
int a = 0, b = 0, c = 0;
for (i = 0; i < 1000; i++)
{
if (i > 99)
{
a = i / 100; //百位
b = (i / 10) % 10; //十位
c = i % 10; //个位
if (pow(a, 3) + pow(b, 3) + pow(c, 3) == i)
{
printf("%d ", i);
}
}
}
}