题目:用C语言打印1000以内的水仙花数,“所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1^3+5^3+3^3(1的三次方+5的三次方+3的三次方)
解题思路一:在100~1000以内的整数中逐个判断,先求出该数各个数位的数字,然后各个数位数字三次方和这个数比较,等于这个数说明为水仙花数
解法1:用for循环实现
#include<stdio.h>
int main()
{
int i;
int a,b,c;//a为个位数字,b为十位数字,c为百位数字
for(i=100;i<1000;i++)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==(a*a*a+b*b*b+c*c*c))
{
printf("%d\n",i);
}
}
return 0;
}
解法2:用while循环实现
#include <stdio.h>
int main()
{
int i=100;
int a,b,c;//a为个位数字,b为十位数字,c为百位数字
while(i>=100 && i<1000)
{
a=i%10;
b=i/10%10;
c=i/100;
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%d\n",i);
}
i++;
}
return 0;
}
运行结果:
解法思路2:分别从三个位上的数字入手, 如果这三个数的立方和等于这个三个数的组合,则说明这个组合数就是水仙花数。
解法3:用for循环实现
#include <stdio.h>
int main()
{
int i; //c,b,a形成的组合数
int a,b,c; //a为个位数字,b为十位数字,c为百位数字
for(c=1;c<=9;c++)
{
for(b=0;b<=9;b++)
{
for(a=0;a<=9;a++)
{
i=c*100+b*10+a;
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%d\n",i);
}
}
}
}
return 0;
}
运行结果: