日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言要计算20,用C语言计算1~20的阶乘之和

發布時間:2023/12/31 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言要计算20,用C语言计算1~20的阶乘之和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

昨天(2018/12/7)在做C語言的課后練習題的時候,有一道題要求我們計算1~20的階乘之和。代碼很快就寫出來了,考慮到結果的值會比較大,而在Windows操作系統下,int 類型和 long 類型居然都是4個字節(C#中long類型是八個字節,找同學試了下,Linux下C語言的long類型好像也是八個字節),所以我使用double類型。代碼如下:

1 #include

2

3 intmain()4 {5 double n = 1, sum = 0;6 for (int i = 1; i <= 20; i++)7 {8 n *=i;9 sum +=n;10 }11 printf("%lf",sum);12 }

結果輸出了:2561327494111820300.000000

我以為我得到了正確的結果,但我將同樣的算法搬到C#中之后,卻好像不是那么回事。(考慮到C#中long類型是八個字節,范圍足夠大,所以在C#中我直接使用了long類型。)代碼如下:

1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6

7 namespaceHomework8 {9 classProgram10 {11 static void Main(string[] args)12 {13 long n = 1, sum = 0;14 for (int i = 1; i <= 20; ++i)15 {16 n *=i;17 sum +=n;18 }19 Console.WriteLine(sum);20 Console.ReadKey();21 }22 }23 }

得到的結果是:2561327494111820313

相差了13?什么鬼?我不(ji)厭(qi)其(wu)煩(liao)的按著計算器(科學計算器里有求階乘的函數),得到的結果和我在C#里得到的一模一樣。那C得出來的是什么鬼(其實在C#里將long改成double,得出來的好像也有誤差)。而且我嘗試著在輸出結果之前,手動把sum加上了13,即在輸出之前加入這么一條語句“sum += 13;”,發現……并沒有什么用,結果還是 2561327494111820300.000000。那……加100?沒用!加200?沒用!加300?神奇的事情發生了,得到了 2561327494111820800.000000!???等下,這不是加了500麼,我只給它加了300。。。哭笑不得。

對于具體原因我沒有搞懂,可能是浮點數在計算機里的存儲和計算有關吧,可能造成了舍入誤差。反正就是數據類型的問題。

那在Windows環境下用C語言做這道題,還得用 long long 類型。于是乎,C語言的代碼變成了:

1 #include

2

3 intmain()4 {5 long long n = 1, sum = 0;6 for (int i = 1; i <= 20; i++)7 {8 n *=i;9 sum +=n;10 }11 printf("%I64d",sum);12 }

輸出說明符是“%I64d”,百度來的。總之結果是對了:2561327494111820313。

所以,您也別糾結網上有的回答 2561327494111820300 得到了200+贊,卻同時得到了600+踩了。至于得到結果 268040729 的,要么是int類型溢出(Windows操作系統下C語言的 long 類型也會溢出),要麼是結果輸出的時候用了“%d”格式說明符導致溢出。

PS:long long數據類型好像是C99標準增加的,而VC++6.0(別問我為什么說到這個東西)是在C99之前出現的東西,所以以上代碼在VC++6.0里并不能使用。另外,VC++6.0也不支持“for (int i = 1; i <= 20; i++)”這種寫法,變量 i 的聲明得在for循環語句之前聲明。

原文:https://www.cnblogs.com/Luquan/p/10088319.html

總結

以上是生活随笔為你收集整理的c语言要计算20,用C语言计算1~20的阶乘之和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。