java写的大数阶乘

mac2022-06-30  22

不用大数类。。。 思路就是将结果保存到一个整形数组中,每次进行更新。具体如下: 举个例子 比如 当前数组中存储的是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; }
最新回复(0)