主题:[讨论]各位高手,看看我的C程序错在哪,怎么改?
yuyong87394634
[专家分:0] 发布于 2011-05-25 21:14:00
//求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个回复)
沙发
fragileeye [专家分:1990] 发布于 2011-05-25 21:36:00
水仙数,百度之。。
3 楼
cgl_lgs [专家分:21040] 发布于 2011-05-25 22:51:00
别用pow,直接用X*X*X...
不过确实这种办法可以但效率嘛~~~~
另:pow不接受整型(除非编译器检查不严,或是库太老了)。
4 楼
fragileeye [专家分:1990] 发布于 2011-05-25 23:08:00
除了ls说的,算法也是有问题的。。
sum 在for中每次都得初始化为 0的,在for中 :sum = 0;
5 楼
cxxcomp [专家分:2370] 发布于 2011-05-26 02:58:00
这样的问题,我觉得Fortran还是有优势的。用C写这样类似的东西,总觉得有点开着航母去漂流滴感觉,有劲使不上。个人意见,别拍砖。
6 楼
yuyong87394634 [专家分:0] 发布于 2011-05-26 17:18:00
呃` 用您那个方法我做出来了,但是能不能用我的这个思路把这个程序改改... 非常感谢!!
7 楼
Grand_Unified [专家分:90] 发布于 2011-05-26 23:20:00
程序代码如下:(编译运行成功)
#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 楼
cgl_lgs [专家分:21040] 发布于 2011-05-27 07:13:00
个人认为FORTRAN更适合做那些大数组操作,这些才有优势所在:)
9 楼
cxxcomp [专家分:2370] 发布于 2011-05-27 12:41:00
我觉得不单单是数组的处理上。而是语言设计的初衷不同。fortran本来就很适合做公式的处理,没有过多系统上的附加。而C当然可以做到这些,但是C的设计很显然是和系统相关的。而且,“机器”味道很浓。所以,我说了,用C做直接数据,有点开着航母去漂流的感觉。当然每个人的感觉会不同,也是正常。
10 楼
cgl_lgs [专家分:21040] 发布于 2011-05-27 13:47:00
呵呵,我是从可优化的角度看:)因为FORTRAN支持整数组处理及CoArray等技术:)如果仅是单个数的四则运算,那FORTRAN编译器再牛也优化不到哪儿去:)
C/C++是包容性很强的语言,但正因为这些包容性,他不可能面面俱到:)
当然,涉及到数学方面的东西,很有一部分是用FORTRAN更为合适的:)
我来回复