| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2694 人关注过本帖
标题:请问各位,这个输出所有三位数的水仙花数 的程序 有什么错误
只看楼主 加入收藏
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
结帖率:90.91%
收藏
 问题点数:0 回复次数:13 
请问各位,这个输出所有三位数的水仙花数 的程序 有什么错误
三位数的水仙花数有四个 可是我这个程序只能输出三个 是哪里出问题了?

程序代码:
#include <stdio.h>
#include <math.h>

int main ()
{
    int a,b,c,d=3;
    for (a=1;a<10;a++)
       for (b=0;b<10;b++)
          for (c=0;c<10;c++)
           if (pow(a,d)+pow(b,d)+pow(c,d)==a*100+b*10+c)
            printf("%d%d%d ",a,b,c);
            
    return 0;
}
搜索更多相关主题的帖子: 水仙花 
2016-06-21 09:46
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
是四个呀
153 370 371 407 请按任意键继续. . .
2016-06-21 09:57
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 2楼 grmmylbs
那为什么我的电脑只显示三个。。
2016-06-21 10:01
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 3楼 惧惧
初步判断是不同IDE的pow函数的原因,按你的写法是没有输出a=4,b=0,c=7的情况,
你查一下pow的原型,如下修改就可以输出4个了
对比下我注释掉的部分和修改的部分
程序代码:
#include <stdio.h>
#include <math.h>

int main ()
{
    int a,b,c,d=3;
    for (a=1;a<10;a++)
        for (b=0;b<10;b++)
             for (c=0;c<10;c++)
   //            if (pow(a,d)+pow(b,d)+pow(c,d)==a*100+b*10+c)            //输出153  370  371
                 if (a*a*a+b*b*b+c*c*c==a*100+b*10+c)                    //输出153  370  371  407
                     printf("%d%d%d ",a,b,c);
            
    return 0;
}

ps:刚查了下C的pow()的参数都是double型,在你的编译器中定义其他类型的时候会有数据精度的丢失,不知道是不是这个原因造成的。

[此贴子已经被作者于2016-6-21 10:42编辑过]

2016-06-21 10:31
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 4楼 wanglianyi1
原来如此~  pow是不是 默认不接受0为底数?
2016-06-21 10:39
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 5楼 惧惧
我也认为有这方面的原因,但你看下370不是也有一位是0么。。但是输出了,所以我也不太确定了,不过经过对比修改,可以肯定的是原因就出在pow身上
2016-06-21 10:43
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 4楼 wanglianyi1
您好~再问一个关于函数的问题,这个程序 老是说没有 说明 ran 的存在
程序代码:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

 
int main()
{
    int a;
    printf("%d",ran(a));
    return 0;
} 

int ran(int x)
{
    srand(time(0));
    x=rand()% 100;
    return x;
}
2016-06-21 10:45
惧惧
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2016-6-19
收藏
得分:0 
回复 6楼 wanglianyi1
嗯 蟹蟹~
2016-06-21 10:46
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 7楼 惧惧
C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。

[此贴子已经被作者于2016-6-21 11:04编辑过]

2016-06-21 11:00
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
方法一:先声明
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int ran(int x);
int main()
{
    int a;
    printf("%d",ran(a));
    return 0;
}

int ran(int x)
{
    srand(time(0));
    x=rand()% 100;
    return x;
}
2016-06-21 11:02
快速回复:请问各位,这个输出所有三位数的水仙花数 的程序 有什么错误
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026663 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved