大数运算之JAVA实现

由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算。大数运算主要有加、减、乘三种方法。
原理
利用数组连续性,将大数每一位上的数字单独取出放入对应的数组格中,然后再对每一位做单独的加减乘运算。形象的说,类似于小学学习加减乘所列的式子。
具体代码如下:

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;
    }  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值