(用三种方法实现)用C语言打印出所有水仙花数。水仙花数是指一个三位数,其各个位数的立方之和等于该数本身。例如,153是一个水仙花数,因为153=1的三次方+5的三次方+3的三次方。
方法一:
#include <stdio.h>
int main() {
int num, originalNum, remainder, result = 0;
printf("水仙花数:\n");
for (num = 100; num <= 999; num++) {
originalNum = num;
while (originalNum != 0) {
remainder = originalNum % 10;
result += remainder * remainder * remainder;
originalNum /= 10;
}
if (result == num) {
printf("%d\n", num);
}
result = 0;
}
return 0;
}
运行结果:
方法二:
#include<stdio.h>
int main()
{
int a,b,c;
for(int 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\n",i);
}
return 0;
}
运行结果:
这两段代码通过遍历所有三位数(从100到999),计算每个数的个位、十位和百位的立方和,然后将结果与原始数进行比较。如果它们相等,就打印该数,即水仙花数。
方法三:
#include <stdio.h>
int main() {
int num;
printf("水仙花数:\n");
for (num = 100; num <= 999; num++) {
int digit1 = num / 100; // 百位数字
int digit2 = (num / 10) % 10; // 十位数字
int digit3 = num % 10; // 个位数字
int sum = digit1 * digit1 * digit1 + digit2 * digit2 * digit2 + digit3 * digit3 * digit3;
if (sum == num) {
printf("%d\n", num);
}
}
return 0;
}
运行结果:
这段代码同样遍历所有三位数,但是在计算每个数的立方和时,不使用额外的变量和循环。取出百位、十位和个位数字,然后计算它们的立方和,最后与原始数进行比较,如果相等就打印该数。目前我觉得这种方法最简单。
答案不唯一,希望可以帮助您理解如何使用C语言打印出所有水仙花数。
如果您有任何进一步的问题,请随时留言。