由於編程語言提供的基本數值數據類型表示的數值範圍有限,不能滿足較大規模的高精度數值計算,因此需要利用其他方法實現高精度數值的計算,於是產生了大數運算。大數運算主要有加、減、乘三種方法。
原理
利用數組連續性,將大數每一位上的數字單獨取出放入對應的數組格中,然後再對每一位做單獨的加減乘運算。形象的說,類似於小學學習加減乘所列的式子。
具體代碼如下:
import java.util.Scanner;
public class FACT {
public static void main(String[] args) {
int m;
int data[]=new int[3268];
Scanner scanner = new Scanner(System.in);
m= scanner.nextInt();//輸入m的 求m!
m=BigFact(m,data);
System.out.print(data[m--]);
while(m>0)
System.out.printf("%05d",data[m--]);
System.out.println();
scanner.close();
}
static int BigFact(int m,int data[])
{
int i, j, k,index =1;//index爲位數
int N=100000;
data[1]=1;//1!=1
for (i=1; i<=m; i++)
{
for (j=1; j<=index; j++)//模擬乘法
data[j]*= i;
for (k=1;k<index; k++)//進位
if (data[k]>=N)
{
data[k+1]+=data[k]/N;
data[k]%=N;
}
while (data[index] >=N)//最高位進位
{
data[index+1] = data[index]/N;
data[index++]%=N;
}
}
return index;
}
}