題目:設計一個可容納40位數的求n!的程序
程序構思:
首先將Data數組中的數據設置爲初始值零,再令第一位數值爲1,位數也爲1,再將每次相乘的乘積存回數組中,並順序處理每個數組中超過10的數,若數值超過10,則將位數加1,原來的數值除以10,所得的商與前一位數的和存回到前一位數的數組中,再將餘數存回到原來位數的數組中,最後再輸出每次計算後的結果:
程序清單:
import java.util.Scanner;
/*
* 程序功能:設計一個可容納40位數的求n!的程序
*/
public class array {
public static void main(String[] args) {
int Data[] = new int[40];// 存儲40位數的整數
int Digit; // 數據位數據量
int i, j, r, k;
int N; // 用戶輸入值
for (i = 1; i < 40; i++) { // 將數組初始爲0
Data[i] = 0;
}
Data[0] = 1; // 設第0位數數組元素爲1
Data[1] = 1;
Digit = 1; // 設數據位數爲1
System.out.print("Enter a number what you want to calculus:");
Scanner in = new Scanner(System.in);
// 讀取用戶欲求的N值
N = in.nextInt();
// N=in.nextInt();
for (i = 1; i < N + 1; i++) {
for (j = 1; j < Digit + 1; j++)
Data[j] *= i;
for (j = 1; j < Digit + 1; j++) {
if (Data[j] > 10) {
for (r = 1; r < Digit + 1; r++) {
if (Data[Digit] > 10)
Digit++;
// 當數組中的元素值大於10時,則位數加1
Data[r + 1] += Data[r] / 10;
Data[r] = Data[r] % 10;
}
}
}
System.out.print(i + "!=");
for (k = Digit; k > 0; k--) {
System.out.print(Data[k]);
}
System.out.println();
}
}
}
比如輸入35,結果如下:
Enter a number what you want to calculus:35
1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
21!=51090942171709440000
22!=1124000727777607680000
23!=25852016738884976640000
24!=620448401733239439360000
25!=15511210043330985984000000
26!=403291461126605635584000000
27!=0888869450418352160768000000
28!=34888344611713860501504000000
29!=011761993739701954543616000000
30!=352859812191058636308480000000
31!=11938654177922817725562880000000
32!=382036933693530167218012160000000
33!=12607218811886495518194401280000000
34!=428645439604140847618609643520000000
35!=15002590386144929666651337523200000000
此程序是根據《數據結構》(Java語言版)中的一個示例寫的。