記得學(xué)習(xí)C語言的時候,老師教for循環(huán)語句舉例時就是級數(shù)求和(大概很多C教程都喜歡用這個例子的吧)。
而且考試時試卷上經(jīng)常都會有這道題目,于是很多同學(xué)幾乎是把整個程序段背下來,現(xiàn)在回想一下還真覺得有點搞笑的味道:)
說起來也不能怪俺們的老師和同學(xué)啊,俺們國家的教育就是這樣,沒辦法啊,誰叫俺們都是中國人呢,呵呵(沒有崇洋的味道啊,只是對俺們國家的教育頗有微詞啦)。
那時侯我們的標準程序段是這樣的:
∑N = 1 + 2 ... N
int main()
{
int i, sum = 0;
for(i = 1;i < N;i ++)sum += i;
printf("1-N的級數(shù)和是: %i",sum);
return 0;
}
這個標準還是我“制定”的啦,全班2/3的同學(xué)都用俺的標準應(yīng)付老師和試卷,哈哈(成就感?!)。
這個標準是我知道的第一個知道求級數(shù)和的方法!
后來,學(xué)數(shù)據(jù)結(jié)構(gòu)的排序方法時,因為書上講到冒泡、選擇還有個什么排序法來著,循環(huán)次數(shù)正好就是一個級數(shù)和,就想知道到底會是多少次循環(huán)?
于是發(fā)奮圖強(發(fā)糞涂墻?),可能是我比別人笨,我硬生生研究了一天才得出一個公式:
∑N = (N ^ 2) / 2 + N / 2
可是當我公布我的發(fā)現(xiàn)時,遭受了沉重的打擊:有人說中學(xué)時學(xué)過這個公式了(我汗顏,怎么我就不記得中學(xué)課本上有這個公式啊?哪位同仁中學(xué)時學(xué)過這個公式告訴俺一聲啊,這事俺如今還耿耿如懷呢?!)。
不過不管怎么樣,我總算是知道了第二種方法:
int main()
{
float sum;
sum = (N ^ 2) / 2 + N / 2;
printf("1-N的級數(shù)和是: %i",(int)sum);
return 0;
}
再就是今天和女友無意間說起這個話題,竟然又讓我發(fā)現(xiàn)了另外一種更簡單的方法(天才?笨蛋?):
∑N = N * (N / 2 + 0.5)
呵呵,是不是有點像上一個公式的簡化公式啊?!
俺沒有去做簡化啦,也沒有去驗證(主要是不記得怎么去簡化了啦),哈哈。
終于,第三種方法出爐了:
int main()
{
float sum;
sum = N * (N / 2 + 0.5);
printf("1-N的級數(shù)和是: %i",(int)sum);
return 0;
}
呵呵,也不知道會不會有更簡單的方法。
此文純屬無聊之作啦(有人會像偶一樣無聊嗎?!),哈哈!!!
這個是中學(xué)的很普通的公式.看來你的數(shù)學(xué)........
你考慮一個很簡單的問題:2的19999999999999999999次方等于多少?需要所有的精度值,這樣才能考驗一個人。
n*(n/2+0.5)
不過樓主換一種思維方式,其實還是不錯的。
從sum = (N ^ 2) / 2 + N / 2 到 sum = N * (N / 2 + 0.5)
博主是信手寫來,還是?
同樣是誤人子弟,如果我面試這樣的應(yīng)聘者,我寧可要能給我一個循環(huán)的家伙。
博主的程序絕對沒有經(jīng)過測試,或者說你根本不會如何測試程序
沒想到你竟然直接把數(shù)學(xué)公式往程序里面丟?
一笑而過……
再說一句,不要把每經(jīng)過嚴格測試的成提交到網(wǎng)上,誤人不淺,因為有些初學(xué)著會拿著你的程序轉(zhuǎn),結(jié)果弄半天沒得到正確結(jié)果,還以為是自己程序?qū)戝e了。
當時確實只測試過第一個例子。看了樓上兩位的回復(fù),我又測試了下面的兩個例子,但是只有第二段不能正常運行。
下面進行修復(fù):
1,三段代碼中的 N 都是一個常量,程序中沒有給出具體值。
在測試之前可以加入:const int N = 100;
2,第二個段代碼的修正:
const int N = 100;
int main()
{
float sum;
sum = pow(N, 2) / 2 + N / 2;
printf("1-N的級數(shù)和是: %i",(int)sum);
return 0;
}
最后,我在標題和文章中都聲明了:無聊之舉,所以不能作為學(xué)術(shù)參考的。
當然,本人其他的技術(shù)類型文章則是經(jīng)過嚴格測試的。
相信其他的文章對初學(xué)者是必定有用的。
--真的測試過了嗎?怎么測試的?
for(i = 1;i < N;i ++)sum += i;
這個N到底加了沒有?
我這兒有一篇《也說說級數(shù)求和(1+2+3...N)和其他》http://www.shnenglu.com/Fox/archive/2007/12/21/simple_series_sum.html
可資斧正
int main()
{
int n,answer=0;
scanf("%d",&n);
for (int i=1;i<=n;i++)
answer+=i;
printf("%d\n",answer);
return 0;
}
int main()
{
int n;
scanf("%d",&n);
if (n%==0) n=(n++)*(n/2);
else n=(n*((n--)/2)+n);
printf("%d\n",n);
return 0;
}