一. 前情
能點進這篇文章的,想必也已經知道了C語言和C++語言,以及階乘的定義,所以在此不贅述了。SUM(1!~20!)這個問題是我在大一學C語言時的一個小題,最近又要把編譯器裝回來,所以裝完之后順便用這個問題白話白話。
邏輯方面並不難,但主要是溢出的問題,即這個數太大了,用 int 整型變量根本裝不下,相當於讓你用一張小紙條記圓周率的小數點后100w位的數字,小紙條太小,裝不下那么多字。要解決這個問題,你可以選擇:1. 找一張很大的大紙條。2. 找好多張小紙條拼起來。 本文用的前者(后者可自行百度“多位整數 大整數 運算”)。
環境:Win7系統。Dev-C++編譯器。C++語言。
二. 具體
代碼:
#include<iostream>
using namespace std;
int main()
{
int i=1;
__int64 m=0,j=1;
cout<<"SUM(1!~20!)"<<endl<<"=0";
for(i;i<21;i++)
{
j*=i;
m+=j;
cout<<"+"<<j;
}
cout<<endl<<"="<<m<<endl;
return 0;
}
輸出結果:
三. 后續
__int64
可用long long
代替。另外C++ 中的cin
與cout
函數相當於C語言中的scanf
與printf
函數,C語言使用者可自行理解。
一開始用 int 整型變量時,在沒讓程序 printf 出每個數的階乘得數的情況下,求出結果是 268040729,可通過部分信息證偽,正確結果:
- 肯定以“3”結尾,即個位數字為3。
- 肯定是3的倍數。
- 至少是17位數(實際是19位)。
以上三點自行理解,理解不了就問,但我回答完之后可能會加上:
所以說學編程啊,還是要提高自己的計算與邏輯能力。
參考資料:
http://www.cnitblog.com/cockerel/archive/2006/08/16/15356.html