代碼如下:
#include<stdio.h>
#include<time.h>
#include<math.h>
long add1(long n)
{
long i,a=0;
for(i=1;i<=n;i++)
a=a+i;
return a;
}
void AddTime1(long n)
{
clock_t t;
long sum=0;
t=clock();
sum=add1(n);
t=clock()-t;
printf("方法:\n");
printf("結果:1~%d之和:%ld\n",n,sum);
printf("用時:%lf秒\n",((float)t)/CLOCKS_PER_SEC);
}
long add2(long 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");
printf("結果:1~%d之和:%ld\n",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;
}
為啥輸入9999999方法一的和是負數
輸入1000001方法二的和是負數
而輸入99999999時兩個方法都是對的


uj5u.com熱心網友回復:
你看看你的編輯器long型和int型的取值范圍,一般來說int和long型范圍時一樣的,你用下面的陳述句試試。printf("%d\n",__INT_MAX__);
printf("%ld\n",__LONG_MAX__);
printf("%lld\n",__LONG_LONG_MAX__);
從你的輸出來看明顯時兩種方法結果都超過了int的最大范圍,改為long long應該就可以了。
uj5u.com熱心網友回復:
嗯,之后我看了一遍,是long的范圍太小了,溢位,換成long long就好了轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/113072.html
標籤:C語言
