|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写程序求所有三位数的水仙花数。水仙花数(Narcissistic number)是指一个n位数 (n≥3),它的每个位上的数字的n次幂之和等于它本身。例如153就是一个水仙花数,因为153=1^3+5^3+3^3。
程序1:为啥无任何输出?
#include <stdio.h>
int main(void)
{
int m,i,j,k;
i=m/100;
j=m/10%10;
k=m%10;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
for(k=0;k<=9;k++)
if(i*i*i+j*j*j+k*k*k==m)
printf("水仙花数为:%d\n",m);
return 0;
}
程序2:输出正确
#include <stdio.h>
int main(void)
{
int m,i,j,k;
for(m=100;m<=999;m++)
{
i=m/100;
j=m/10%10;
k=m%10;
if(i*i*i+j*j*j+k*k*k==m)
printf("水仙花数为:%d\n",m);
}
return 0;
}
程序1和程序2都是求所有三位数的水仙花数的程序。但它们有着不同的输出结果,原因在于它们的代码实现有所不同。
程序1中无法得到正确的输出结果,因为它的变量没有被初始化好。具体来说,程序中的m、i、j和k都是整型变量,当它们没有初始化时,它们的值是随机的,而非0-9之间的数字。因此,即使在程序的最外层循环里分别枚举i、j和k的取值范围(1~9和0~9),这些循环也无法找到任何一个符合条件的水仙花数,也就没有任何输出了。
而程序2正确地输出了所有三位数的水仙花数。它使用了一个for循环,将所有三位数的可能值(从100到999)逐个测试,只有符合“每个位上的数字的n次幂之和等于它本身”的条件才会输出。
因此,正确的输出所有三位数的水仙花数的代码如下:
- #include <stdio.h>
- int main(void)
- {
- int m, i, j, k;
- for (m = 100; m <= 999; m++)
- {
- i = m / 100;
- j = (m % 100) / 10;
- k = m % 10;
- if (i * i * i + j * j * j + k * k * k == m)
- {
- printf("水仙花数为:%d\n", m);
- }
- }
- return 0;
- }
复制代码
在这个代码中,我们将m的范围限定为100到999之间。对于每个取值的可能情况,依次计算出其百位、十位和个位上的数字,判断它们是否符合条件,若成立则输出即可。
求最佳答案
|
|