1+2+...+n结果为负数,longlong型也没用,不知道哪里错了。

题目实验题1:求1~n的连续整数和
目的:通过对比同一问题不同解法的绝对执行时间,体会不同算法的优劣。
内容:编写一个程序exp1-1.cpp,对于给定的正整数n,求1+2+…+n,采用逐个累加和n(n+1)/2(高斯法)两种解法。对于相同的n,给出这两种解法的求和结果和求解时间,并用相关数据进行测试。

代码:

#include<stdio.h>
#include<time.h>
#include<math.h>

long add1(long long n)
{
    long long i,sum=0;
    for(i=1;i<=n;i++)
       sum+=i;
    return sum;
} 

void AddTime1(long long n)
{
    clock_t t;
    long long sum;
    t=clock();
    sum=add1(n);
    t=clock()-t;
    printf("方法1:\n");
    printf("结果:%lld\n",sum);
    printf("用时:%lf\n",((float)t)/CLOCKS_PER_SEC);
}

long add2(long long n)
{
    return n*(n+1)/2;
}

void AddTime2(long long n)
{
    clock_t t;
    long long sum;
    t=clock();
    sum=add2(n);
    t=clock()-t;
    printf("方法2:\n");
    printf("结果:%lld\n",sum);
    printf("用时:%lf\n",((float)t)/CLOCKS_PER_SEC);
}

int main()
{
    int n;
    printf("n(大于1000000):");
    scanf("%d",&n);
    if(n<1000000)
       return 0;
    AddTime1(n);
    AddTime2(n);
    return 1; 
} 

结果问题:
当n为99999999(8个9),结果为正数;当n为77777777(8个7),结果为负数。按理说,从1加到n,99999999比77777777大,后者怎么会是负数呢?

如图所示:

img

img

long add1(long long n),这返回值也得用long long 啊


#include<stdio.h>
#include<time.h>
#include<math.h>
#include <stdlib.h>
 
long long add1(long long n)
{
    long long i,sum=0;
    for(i=1;i<=n;i++)
       sum+=i;
    return sum;
} 
 
void AddTime1(long long n)
{
    clock_t t;
    long long sum;
    t=clock();
    sum=add1(n);
    t=clock()-t;
    printf("方法1:\n");
    printf("结果:%lld\n",sum);
    printf("用时:%lf\n",((float)t)/CLOCKS_PER_SEC);
}
 
long long add2(long long n)
{
    return n*(n+1)/2;
}
 
void AddTime2(long long n)
{
    clock_t t;
    long long sum;
    t=clock();
    sum=add2(n);
    t=clock()-t;
    printf("方法2:\n");
    printf("结果:%lld\n",sum);
    printf("用时:%lf\n",((float)t)/CLOCKS_PER_SEC);
}
 
int main()
{
    int n;
    printf("n(大于1000000):");
    scanf("%d",&n);
    if(n<1000000)
       return 0;
    AddTime1(n);
    AddTime2(n);
    system("pause");
    return 1; 
}