回 帖 发 新 帖 刷新版面

主题:[讨论]各位高手,看看我的C程序错在哪,怎么改?

//求1--10000之间所有满足各位数字的立方和等于它本身的数
#include "stdio.h"
#include "math.h"
void main()
{
    int i,j;
    double sum=0;
    for(i=1;i<10000;i++){
        j=i;
        do{
        sum=sum+pow(j%10,3);
        j=j/10;
        }while(j);    

        if(i==sum)
            printf("%5d",i);
    }
}

回复列表 (共10个回复)

沙发

水仙数,百度之。。

板凳


我想知道我的思路能不能编出来...

3 楼

别用pow,直接用X*X*X...
不过确实这种办法可以但效率嘛~~~~
另:pow不接受整型(除非编译器检查不严,或是库太老了)。

4 楼

除了ls说的,算法也是有问题的。。
sum 在for中每次都得初始化为 0的,在for中 :sum = 0;

5 楼

这样的问题,我觉得Fortran还是有优势的。用C写这样类似的东西,总觉得有点开着航母去漂流滴感觉,有劲使不上。个人意见,别拍砖。

6 楼


呃`  用您那个方法我做出来了,但是能不能用我的这个思路把这个程序改改...  非常感谢!!

7 楼

程序代码如下:(编译运行成功)
#include <stdio.h>
long lifang(int);
void main ()
{
    int num,yushu,total;
    for (int i=1;i<=10000;i++)
    {
        num=i;
        total=0;
        while (num)
        {
            yushu=num%10;
            total+=lifang(yushu);
            num/=10;
        }
        if(total==i)
            printf("%d\t\t",i);
    }
    printf("\n");
}
long lifang(int x)
{
    return x*x*x;
}

8 楼

个人认为FORTRAN更适合做那些大数组操作,这些才有优势所在:)

9 楼

我觉得不单单是数组的处理上。而是语言设计的初衷不同。fortran本来就很适合做公式的处理,没有过多系统上的附加。而C当然可以做到这些,但是C的设计很显然是和系统相关的。而且,“机器”味道很浓。所以,我说了,用C做直接数据,有点开着航母去漂流的感觉。当然每个人的感觉会不同,也是正常。

10 楼

呵呵,我是从可优化的角度看:)因为FORTRAN支持整数组处理及CoArray等技术:)如果仅是单个数的四则运算,那FORTRAN编译器再牛也优化不到哪儿去:)

C/C++是包容性很强的语言,但正因为这些包容性,他不可能面面俱到:)

当然,涉及到数学方面的东西,很有一部分是用FORTRAN更为合适的:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册