1+2+3+...+n 的算法怎么写啊?

jock_521 2003-09-26 09:12:05
1+2+3+...+n 的算法怎么写啊?昨天的面试的时候没有写出来!请大吓,帮帮
...全文
2639 48 打赏 收藏 转发到动态 举报
写回复
用AI写文章
48 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangchaobj 2003-09-28
  • 打赏
  • 举报
回复
首先,用递归完全没必要,再程序运行上没有错误,但在设计上是错误的。递归是要压栈的,犯的上么?

用循环也不好,太慢了。

这种能用O(1)实现的问题没必要用O(n)来实现,没什么可讨论的。
xdspower 2003-09-28
  • 打赏
  • 举报
回复
用for就是递归了
yushang0824 2003-09-28
  • 打赏
  • 举报
回复
这个公司是不是有点问题,不知道他想干什么呀?

为了提高你的想象力?
summer6074 2003-09-27
  • 打赏
  • 举报
回复
除了公式,只怕最想考的就是那个整数大小,还是用数组吧,高程教材好象有个差不多的
晨星 2003-09-27
  • 打赏
  • 举报
回复
我猜面试人想要的可能是arfi()的算法。
xdspower 2003-09-27
  • 打赏
  • 举报
回复
其实如果是编程的话,要作一些测试的,比如n是否有效等,这是编程的基本原则之,否则没有人敢用你的代码的。
还要考虑溢出等

n*(n+1)/2这个公式是有效的
sunhaifeng 2003-09-27
  • 打赏
  • 举报
回复
n*(n+1)/2
minghui000 2003-09-27
  • 打赏
  • 举报
回复
int AddNumber(int b)
{
int i;
int sum =0 ;
for(i=1;i<=b;i++)
sum = sum + i;
return sum;
}

jgfchy 2003-09-27
  • 打赏
  • 举报
回复
我想很有可能是考当n过大超出长整型时的处理吧。不过哪为大虾能给我解释一下用数组存的原理,我没接触过这种方法啊。谢谢啦。
laZZe 2003-09-27
  • 打赏
  • 举报
回复
恩,是可以用n*(n+1)/2,答案是丰富多采的嘛,不过我原来我在学c语言时,在书上看到过这个例题,不过书上的意思是让用for语句做,我想他的意思可能也是这样吧?
existsluawjb 2003-09-27
  • 打赏
  • 举报
回复
用tc3.0啊
#include <stdio.h>
void main()
{
int i,n,sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
sum=sum+i;
printf("%d,sum);

}
yongming520 2003-09-26
  • 打赏
  • 举报
回复
greatly agree with hackingtruth(尘封)
Nemo1314 2003-09-26
  • 打赏
  • 举报
回复
to hackingtruth(尘封)
你说的理由我看最有可能了!
n超过了存储范围。
建议用数组做!
scuthdd 2003-09-26
  • 打赏
  • 举报
回复
最后这个好啊
buzhiming99 2003-09-26
  • 打赏
  • 举报
回复
先用数学公式得到sum = n*(n+1)/2

int sum(int i)
{
return i*i(i+1)/2;
}
fatefit 2003-09-26
  • 打赏
  • 举报
回复
同意chijiao(赤脚) :

因为他分析的才是真正的考虑问题。其他人都是片面的。
jianshen77 2003-09-26
  • 打赏
  • 举报
回复
这个题目很奇怪,如果考算法高中就知道了高斯的天才。
可能主要就是考超出长整数标识的范围是如何考虑的!
不考虑这些,用一般的计算方法比如用for循环,可能
空间与时间效率上都不入的规巴!
int factorial(int i){
return (i>1)? (factorial(i-1)+i):1;
}
CsdnPlayer 2003-09-26
  • 打赏
  • 举报
回复
为什么sum=n*(n+1)/2的效率高?
iJoy 2003-09-26
  • 打赏
  • 举报
回复
同意 ONCE(深海幽蓝) 等仁兄,强烈建议用等差数列求和公式sum=n*(n+1)/2;

即使输入数字过大,以至于用到数组计算也没有关系,因为一样可以用数组算一步乘法。
laZZe 2003-09-26
  • 打赏
  • 举报
回复
这个是我写的程序,你看看,可以实现输入n值,求前n项的和的运算~~

main()
{
int sum;
int n;
clrscr(); /*这个函数用来清屏*/
printf("please input n:");
scanf("%d",&n);
sum=fun(n);
printf("sum=%d",sum);
}
int fun(int m)
{
int i,sum=0;
for(i=1;i<=m;i++)
sum=sum+i;
return sum;
}
加载更多回复(28)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧