一.题目描述:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1^3+5^3+3^3。
二.代码实现
方法(一):
包装成函数使用
int Judge(int n)
{
int a = 0;
int b = n;
int sum = 0;
while (b)
{
a = b % 10;
b = b / 10;
sum = sum + (a * a * a);
}
return sum;
}
int main()
{
int num = 0;
int ret = 0;
for (num = 100; num <= 999; num++)
{
ret = Judge(num);
if (ret == num)
{
printf("%d是水仙花数\n", num);
}
}
在主函数内部,设置变量num和ret,因为水仙花数是指三位数,所以要使用循环,num从100开始,999结束,在循环内部调用函数Judge,此时变量ret用来接收函数调用后的结果。最后再判断num的值是否和ret的值相等,来进行判断num是不是水仙花数。
在Judge函数中设置变量a,b,sum。经题目分析我们是要得到一个数的每位上的数,之后每位上的数再分别进行3次幂运算,运算之后的结果再相加与原来的num进行判断。为了保证num的值不被改变,将num的值先赋值给b。接着使用while循环,a=b%10是得到每位的数字,例:153%10=3;
b=b/10是为了得到下个位制的数字,例:153/10=15;如此反复,直到不满足条件b!=0时跳出循环。
运行结果:
方法(二):
int main()
{
int x = 0;
int y = 0;
int z = 0;
int i = 0;
for (i = 100; i <= 999; i++)
{
x = i % 10; //得到个位上数字
y = (i / 10) % 10; //得到十位上数字
z = (i / 100) % 10;//得到百位上数字
if (i == (x * x * x + y * y * y + z * z * z))
{
printf("%d是水仙花数\n", i);
}
}
return 0;
}
该方法比较直观。
运行结果: