大數階乘
問題描述:編寫程式,對給定的n(n <= 100),計算並輸出k的階乘k!的全部有效數字。
注意:如果要求乙個5的階乘,用整型可以儲存,求10的階乘可以用長整型表示,但若要求100的階乘,就無法用長整型表示,此時就必須考慮別的方法。
要求的k!的值,必定已求得(k-1)!的值,依次地推,當 k = 2時,要求的1! = 1為已知。求得(k-1)!的值後,對(k-1)!連續累加k-1此後即可求得k!值。
例如:5!= 120,計算6!,可對原來的120累加5次120後得到720.
由於k!可能大大超出一般整數的位數,因此程式用乙個一維陣列儲存長整型,儲存長整數陣列的每個元素只儲存長整數的一位數字。如有m位長整數n用陣列a儲存,並用a[0]儲存長整數n的位數m,即a[0] = m。按上述約定,陣列的每個元素儲存k的階乘k!的一位數字,並從低位到高位依次存於陣列的第二個元素、第三個元素....
例如:6! = 720,在陣列中的儲存形式為:
a[0] a[1] a[2] a[3]
3 0 2 7
a[0] = 3表示長整數是乙個3位數,接著從低位到高位依次是0、2、7,表示成整數720.
程式實現:
/*
*程式功能:計算任意位數的階乘
*作者blog:
*/#include #include #define maxn 1000
//已知a中的(k-1)!,求k!
void prenext(int a,int k)
if(carry) //向最高為進製
a[++m] = carry;
} free(b);
a[0] = m;
}void print(int *a,int k)
} printf("\n");
}void main()
}}
執行截圖:
另一種求大數階乘的演算法
大數階乘 問題描述 編寫程式,對給定的n n 100 計算並輸出k的階乘k 的全部有效數字。注意 如果要求乙個5的階乘,用整型可以儲存,求10的階乘可以用長整型表示,但若要求100的階乘,就無法用長整型表示,此時就必須考慮別的方法。要求的k 的值,必定已求得 k 1 的值,依次地推,當 k 2時,要...
另一種階乘問題
大家都知道階乘這個概念,舉個簡單的例子 5!1 2 3 4 5.現在我們引入一種新的階乘概念,將原來的每個數相乘變為i不大於n的所有奇數相乘例如 5 1 3 5.現在明白現在這種階乘的意思了吧!現在你的任務是求出1 2 n 的正確值 n 20 輸入 第一行輸入乙個a a 20 代表共有a組測試資料 ...
另一種階乘問題
描述 大家都知道階乘這個概念,舉個簡單的例子 5!1 2 3 4 5.現在我們引入一種新的階乘概念,將原來的每個數相乘變為i不大於n的所有奇數相乘例如 5 1 3 5.現在明白現在這種階乘的意思了吧!現在你的任務是求出1 2 n 的正確值 n 20 輸入 第一行輸入乙個a a 20 代表共有a組測試...