| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2556 人关注过本帖
标题:[讨论]一个关于 1+2+3……+n 的问题(简单吧!)
只看楼主 加入收藏
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
收藏
得分:0 

main带参数可以产生一个可执行文件,但我怎么就没看到什么可执行文件啊

不知道双击该文件会是什么样的?


2004-08-30 12:17
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
收藏
得分:0 
以下是引用knocker在2004-08-29 23:54:50的发言:

哈哈,我告诉你吧,format c:/q

晕倒 这不是格式化c盘么................我想live41不会笨到去格式化自己的系统驱动器把 .郁闷阿

[此贴子已经被作者于2004-08-30 12:36:41编辑过]


点 鼠 标 , 救 饥 民 http://www./
2004-08-30 12:34
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
收藏
得分:0 

关于这个问题跟求N!一样的道理!

c语言教室有!

2004-08-30 17:37
mikewolf
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2004-7-3
收藏
得分:0 
2004-08-30 17:42
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
收藏
得分:0 
以下是引用knocker在2004-08-29 21:19:32的发言:

两个方法:

1,用个足够大的数组,模拟加法运算。

2,用链表动态申请内存,同样模拟加法运算,只要你的内存充许你就可以计算无限大N.

knocker第一个方法可以这样理解么:

/*先申请3个16位的数组 前两个用于运算 最后一个用于存放结果*/

int add1[2];

int add2[2];

long test;

int end[3];

char a=0;

for(int c=0;c<2;c++)

{ add1[c]=a+add1[c]

test=add1[c]+add2[c]

if test>最大值

{ test=test-65536;

a=1;

end[c]=test;

} else.............

end[2]=a+end[3];

}

这只是我的大体思路和想法 不是程序 可能有点乱 但不知道可不可以这样理解


点 鼠 标 , 救 饥 民 http://www./
2004-08-30 18:56
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
[转]从高斯数列谈代码效率

很多有关编程的书上说过,算法的高速与代码的短小往往是不可兼得的;特别是在当前的硬件环境(高速的cpu与大容量的硬盘)下,不必计较算法是否既是最快的又是最短的,一般来说,能达到二者之一就行了。然而我认为,在某些情况下,鱼与熊掌是可以兼得的——只需在算法中做一点人为的“手脚”。以下我将用一个简单的例子来谈这个问题,但我的前提是我决不使用那种spaghetti式的算法,即使能够获得高效的代码。   例:求1+2+3+……+100。   解1:用for循环来求(用C++来实现算法,下同)。

  #include<iostream.h>   void main()   {    int i,sum=0;    for(i=1;i<=100;i++)sum+=i;    cout<<"sum="<<sum<<endl;    return;   }   解2:用递归来求。   #include<iostream.h>   int getsum(int);   void main()   {    int sum=getsum(100);    cout<<"sum="<<sum<<endl;    return;   }   int getsum(int x);   {    if(x==1)return(1);    else return(x+getsum(x-1));   }   很明显,以上两种算法中解2的效率较低,因为在递归中消耗了太多的系统资源。解1的效率确实很高,然而我要告诉你,它并不是效率最高的算法!现在请看我的代码,是我从一本入门级的教材上得到的灵感:   #include<iostream.h>   void main()   {    int sum=(1+100)*100/2;    cout<<"sum="<<sum<<endl;    return;   }   是的,这是高斯求和公式。但你看了这样的“算法”,也许会很不舒服,并告诉我:这不能算做一个好的算法,因为它没有体现出计算机的优越性。没错,你说得很对,那本教材举的这个例子也正是反例,并且不提倡这样编程,理由正如你所说的一样。   但是,不管你乐意不乐意,你都必须承认:这段代码是合法的,并且它不是spaghetti,可读性也很强;最重要的一点是它的效率非常高——它没有做100次循环,只做了三步运算,而且还节省出了一个变量(i)的存储单元。   教材是教材,编程是编程。教材的目的是让你设计出如何让计算机做更多工作的算法,而你甚至可以连高斯求和公式都不必知道,只让计算机不厌其烦地循环100次;编程的目的是以尽可能高效的算法得到正确答案,而不必计较应该采用循环还是高斯求和公式。然而两者又不能完全分离:如果一个程序员只注重前者,那么他的代码难免冗长或低速;如果他一味追求后者,那么他难免写出没几人看懂的高效spaghetti。   我想谈的东西到此为止。总之在程序的设计中,在特定的情况下,完全可以采用类似的方法来提高效率,这没有什么不好——毕竟,程序是用来求解的,而不是用来体现计算机的优越性的。从这里说开去,如果让你设计一个程序,打印1~100的素数,你如何处理“2”呢?

  当然,如果针对本例(高斯数列)而言,最高效的代码应该如下:   #include<iostream.h>   void main()   {    cout<<"sum="<<5050<<endl;    return;   }

live41注:最后一种办法笑死我了~~~

2004-08-31 12:16
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
收藏
得分:0 

[QUOTE]当然,如果针对本例(高斯数列)而言,最高效的代码应该如下:   #include<iostream.h>   void main()   {    cout<<"sum="<<5050<<endl;    return;   } live41注:最后一种办法笑死我了~~~[/QUOTE]

的确是个可取的办法```哈哈


点 鼠 标 , 救 饥 民 http://www./
2004-08-31 14:33
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
收藏
得分:0 
以下是引用knocker在2004-08-29 21:19:32的发言:

两个方法:

1,用个足够大的数组,模拟加法运算。

2,用链表动态申请内存,同样模拟加法运算,只要你的内存充许你就可以计算无限大N.

knocker 帮我写一下地一个方法的代码把 我有点糊涂 但是我知道基本的思路了 麻烦你一下

给出代码来 谢谢你了 至于第二个方法我觉得不是怎么很可取..................


点 鼠 标 , 救 饥 民 http://www./
2004-08-31 22:53
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

main() { long s[10],t,t1,a,N; int i;

printf("输入N:(1+2+3+。。。+N)N在long之内\n"); scanf("%ld",&N);

for(i=9;i>=0;i--) s[i]=0;

a=0; for(t=1;t<=N;t++) { t1=t; for(i=9;i>=0;i--) { a+=s[i]+t1; t1=0 ; s[i]=a%100000000; a/=100000000; if(!a)break; } }

for(i=0;i<10;i++) if(s[i])printf("%.8ld",s[i]);

}

long之内就这样可以了,如果这个N很大,同样的方法将N用数组表示,程序就要麻烦一点

自己优化吧,又没钱给!


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-08-31 23:32
忆楠
Rank: 1
等 级:新手上路
帖 子:721
专家分:0
注 册:2004-7-5
收藏
得分:0 
  谢谢阿  我已经差不多搞懂了

点 鼠 标 , 救 饥 民 http://www./
2004-09-02 19:48
快速回复:[讨论]一个关于 1+2+3……+n 的问题(简单吧!)
数据加载中...
 
   



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

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