java写的大数阶乘

不用大数类。。。
思路就是将结果保存到一个整形数组中,每次进行更新。具体如下:
举个例子 比如 当前数组中存储的是32(我在数组中为了方便存储,将数组进行了倒序存储,所以实际是213),要乘以69,那么我们首先进行693(个位数)的操作,此时 693=207,因而现在数组原来是3的位置被替换为7,20为进位,接着69*2+20=158,原来为2的替换为8,进位为15,一位一位的补进去,因而现在为 7851,倒序一下为1587,验证一下 23(实际的为23,数组中为倒序)*69=1587,完美。代码为:

public String JieCheng(int x){
    int []list=new int[1000];  //创建一个数组用来存放计算得到的整数
    list[0]=1;  //给初值
    int listLength=1; //标记数组当前的长度
    int midum1 = 0;  //该参数用来标定每次进位的数字 需要每次清零
    for(int i=2; i<=x; i++){  //对阶乘的数字进行循环相乘,从2开始
        for(int j=0; j<listLength; j++){  //对当前的数组进行遍历并与当前的i相乘
            int midum = list[j]*i+midum1; //相乘结果加上进位
            midum1=0;  //进位清零 目的是为了保证在对进位判断时均为当前进位
            if(midum>9) {  //若大于9 则将该数拆分为个位数字与进位
                list[j] = midum%10;
                midum1= midum/10;
            }
            else{  //小于9直接送入数组
                list[j] = midum;
            }
        }
        //将当前进位一个个的存放进数组
        if(midum1 >0){
            while(midum1 > 0){
                list[listLength++]=midum1%10;
                midum1 /= 10;
            }
        }
    }

    String s = "";
    for(int i=0;i<listLength;i++){
        s = s + list[i];//拼接成字符串,最终放在变量s中
    }
    s=new StringBuffer(s).reverse().toString(); //字符串逆置
    return s;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值