为了账号安全,请及时绑定邮箱和手机立即绑定

求大佬解释下,为什么这个程序中累计法有些数字会出现错误?

/*为了计算一个功能的执行时间,常用方式:

    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时是正确的;

http://img1.sycdn.imooc.com//5aadf55800012f6805310218.jpg

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

http://img1.sycdn.imooc.com//5aadf5910001d1e405250220.jpg

正在回答

举报

0/150
提交
取消

求大佬解释下,为什么这个程序中累计法有些数字会出现错误?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号