1+2+3+...+n 的算法怎么写啊?昨天的面试的时候没有写出来!请大吓,帮帮
不就输入一个数然后i++一直到这个数,累积相加不可以吗?
int AddNumber(int N)
{
int i;
int sum =0 ;
for(i=1;i<=N;i++)
sum = sum + i;
return sum;
}
n*(n+1)/2
如果n不是很大,则很容易解决了。
如:
int nTotal = 0;
for ( int i = 0 ; i < n; i ++)
{
nTotal += i;
}
但如果n->最大整数的话,应该考虑存储和的方式。
类似如:
#define _MAX_PART_ 100000
#define _ONE_STEP_ 1000000000
#define _MAX_COUNT_ 10000
#include "iostream.h"
#include "stdio.h"
#include <string.h>
#define TYPE __int64
typedef struct{
TYPE iValue;
}PART;
PART Part[_MAX_PART_];
void Total(TYPE i ,TYPE &nMax)
{
if(i > _ONE_STEP_)
{
TYPE k = i / _ONE_STEP_;
Part[1].iValue += k;
Part[0].iValue += i % _ONE_STEP_;
}
else
{
Part[0].iValue += i;
}
for(int k = 0 ; k < nMax; k ++)
{
if(Part[k].iValue > _ONE_STEP_ )
{
TYPE tt = Part[k].iValue / _ONE_STEP_;
Part[k + 1].iValue += tt;
Part[k].iValue = Part[k].iValue - tt * _ONE_STEP_;
if(k + 1 == nMax)
{
nMax ++;
break;
}
}
}
}
main()
{
...
int nMax = 1;
for(int i = 0; i < n ; i ++)
{
Total(i,nMax);
}
...
}
int calc(int n)
{
int s=0;
for(int i=1; i<=n; i++)s+=i;
return s;
}
题目是让你写算法,又不是让你用程序实现啊
total=(1+n)*n/2
用公式吧,这样的话效率是最高的
sum=(n+1)*n/2
楼上说的合适
int calc(int n)
{
int s=0;
for(int i=1; i<=n; i++)s+=i;
return s;