第七题:打印所有的水仙花数
打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
程序分析:
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
#include <stdio.h>
int main() {
int i, num, digit, sum;
for (i = 100; i <= 999; i++) {
num = i;
sum = 0;
while (num > 0) {
digit = num % 10;
sum += digit * digit * digit;
num /= 10;
}
if (sum == i) {
printf("%d\n", i);
}
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<stdio.h>
// %取个位数 比如 123%10=3
// /去个位数 比如 123/10=12
int main() {
for(int i = 100; i < 1000; i++){
int sum = 0; //累计和
int temp = i;//用临时变量拆分,原数还要用于比较是不是水仙花数
//这个循环把每个数拆开求其三次方之和
do{
int a=temp%10;
temp=temp/10;
sum+=a*a*a;
}while(temp >0);
//判断:是不是水仙花数
if(i==sum){
printf("%d ",i);
}
}
}
法二:
#include<stdio.h>
int main()
{
int i,x,y,z;
for(i=100;i<1000;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;
}
问题解答:
根据参考资料中给出的多段代码,我们可以选择其中一段来实现打印所有的水仙花数的功能。
以下是一种实现方式:
#include <stdio.h>
#include <math.h>
int main() {
int n1, n2, n3, i;
for (i = 100; i < 1000; ++i) {
n1 = i / 100; // 百位数
n2 = (i - 100 * n1) / 10; // 十位数
n3 = i % 10; // 个位数
if ((pow(n1, 3) + pow(n2, 3) + pow(n3, 3)) == i) {
printf("%d\n", i); // 打印水仙花数
}
}
return 0;
}
运行以上代码,即可得到所有的水仙花数。