首页 > 试题广场 >

写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型

[问答题]
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
推荐

【解答】

int Sum( int n ) 
{  
 return ( (long)1 + n) * n / 2;  //或return (1l + n) * n / 2; 
} 
【剖析】
对于这个题,只能说,也许最简单的答案就是最好的答案。下面的解答,或者基于下面的解答思路去优化,不管怎么“折腾”,其效率也不可能与直接return ( 1 l + n ) * n / 2相比!   
int Sum( int n ) 
{ 
 long sum = 0; 
 for( int i=1; i<=n; i++ ) 
 { 
 sum += i; 
 } 
 return sum; 
}  
编辑于 2015-10-29 09:51:51 回复(10)

Int fun(int n)

{

if(n<1)return 0;

retrun n+fun(n-1);

}

发表于 2019-12-27 09:11:14 回复(0)
说实话,这种题就是课堂练习中,都认为是水题。
在正常不水的面试中根本不会出现。哪怕是出道斐波那契数列,考察一下动规,也比这样的水题要强。
发表于 2015-12-13 19:07:55 回复(2)
看到这样的题就想递归,是不是没救了hhhh
发表于 2020-07-16 15:41:59 回复(0)
int Sum( int n )
 return  n&1==1?((n+1)>>1)*n:(n+1)*n>>1;考虑n是奇数还是偶数。当为奇数时:(n+1)*n/2;计算时错误的(0.5没有了)。
}
发表于 2018-02-14 08:56:57 回复(2)
int Sum(int n)
{
    if(n < 1)
        return 1;
    return n + Sum(n - 1);
}
发表于 2015-11-20 23:34:49 回复(1)
这个题目考查的不是程序员的代码水平,而且考查程序员的逻辑思路,不要被题目所局限,其实就是一个等差数列的求和公式,调用n个循环会不会很浪费时间呢
发表于 2020-12-20 11:54:59 回复(0)
把除2换成移位操作更快!return (1L+n)*n>>1;
发表于 2020-02-18 21:14:19 回复(0)
直接用STL的accumlate.

int Sum(int n)
{
vector<int>v;
for(int i = 0; i <= n;i++){
v.push_back(i);
}
int sum = accumulate(v.begin(),v.end(),0);
return sum;
}
编辑于 2019-09-12 10:34:52 回复(0)
long(1)
发表于 2019-03-18 16:53:44 回复(0)

为什么lang放在1上,整体不行吗?

return (long)((n+1)*n/2)

发表于 2018-11-21 10:25:44 回复(1)
为什么我看不懂 return (1 | + n ) * n / 2,我代一个5进去,结果是12。
发表于 2017-08-27 11:58:53 回复(2)
(long)1
发表于 2017-06-14 11:50:35 回复(0)
for(i=1;i<=10;i++) { sum=sum+i; } return sum;
发表于 2016-09-06 23:16:57 回复(0)
int sum(int n) { int sum1=0; int i=0; while(i<=n) { sum1+=i; i++; } return sum1; }
发表于 2016-08-22 17:26:44 回复(0)
论算法的重要性
发表于 2016-02-27 16:38:28 回复(0)
int fun(int n)
{
    return (n+1)*n/2;
}
发表于 2015-12-13 21:33:58 回复(1)