【练习】
题目要求:
打印出所有"水仙花数"。
"水仙花数"是指一个三位数,其各位数字立方和等于该本身。
例如:153是一个水仙花数,因为153=1^3+5^3+3^3。
解题思路:
for循环的熟练运用
水仙花数又称阿姆斯特朗数。
三位的水仙花数共有4个:153,370,371,407
解法一:嵌套for循环计算水仙花数
#include<stdio.h>
#include<math.h> //调用数学头文件
int main()
{
int num(int x); //函数声明,求一个数的三次方
int i,j,k,d;
for(i=1;i<=9;i++) //for循环嵌套
{
for(j=0;j<=9;j++)
{
for(k=0;k<=9;k++)
{
d = num(i)+num(j)+num(k);
// 把三位数的各个数的三次方之和存放d
if(d==i*100+j*10+k)
{
printf("%d ",d);
}
// 判断d是否是三位数本身,是就输出
}
}
}
return 0;
}
//函数求一个数的三次方
int num(int x)
{
int y;
y = pow(x,3);
return y;
}
解法二:从三位数区间入手
#include <stdio.h>
#include <math.h>
int main()
{
int num(int x); //函数声明,求一个数的三次方
int a,b,c,d,i;
for(i=100;i<=999;i++)
{
a = i / 100; //三位数的百位取出,存放a
b = i / 10 % 10; //三位数的十位取出,存放b
c = i % 10; //三位数的个位取出,存放c
d = num(a)+num(b)+num(c);
if(d==i) //判断是否为水仙花数
{
printf("%d ",i);
}
}
return 0;
}
//函数求一个数的三次方
int num(int x)
{
int y;
y = pow(x,3);
return y;
}
解法三:精简版
#include <stdio.h>
int main()
{
int a,b,c,i;
for(i=100;i<=999;i++)
{
a = i / 100;
b = i / 10 % 10;
c = i % 10;
if(a*a*a + b*b*b + c*c*c == i)
{
printf("%d ",i);
}
}
return 0;
}