求大佬解释下,为什么这个程序中累计法有些数字会出现错误?
/*为了计算一个功能的执行时间,常用方式:
clock_t t; //定义时钟变量t
t=clock(); //求调用前的时间
t=clock()-t; //求时间差,即该功能的执行时间
printf("用时:%1f\n",((float)t)/CLOCKS_PER_SEC); //转换为秒单位,再输出
*/
#include <stdio.h>
#include <time.h> //clock_t类型,clock()函数和CLOCKS_PER_SEC常量的声明
#include <math.h>
//----------- 方法一 ------逐个累加--
long add1(long n) //求1+2+...+n
{
long i,sum=0;
for(i=1;i<=n;i++)
sum+=i;
return sum;
}
void AddTime1(long n) //方法一的耗时统计
{
clock_t t;
long sum;
t=clock();
sum=add1(n);
t=clock()-t;
printf("方法1:\n 结果:1~%d之和:%ld\n 用时:%1f秒\n",n,sum,((float)t)/CLOCKS_PER_SEC);
}
//-------方法二---高斯法----
long add2(long n) //求1+2+...+n
{
return n*(n+1)/2;
}
void AddTime2(long n) //方法二的耗时统计
{
clock_t t;
long sum;
t=clock();
sum=add2(n);
t=clock()-t;
printf("方法2:\n 结果:1~%d之和:%ld\n 用时:%1f秒\n",n,sum,((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;
}
输入99999999时是正确的;

但是输入99999978,累加法就出现负数了??
