您的位置:首页 > 编程语言 > Java开发

利用数组实现大数的阶乘

2015-10-11 13:45 316 查看
大数的相加利用数组是比较简单实现的大数的阶乘主要是根据小学计算乘法的规则  稍加改进 代码如下package ACM;import java.util.Scanner;public class Main{public static void main(String []args){Scanner sc = new Scanner(System.in);int n=sc.nextInt();while(n!=-1){int put = 0;int res[]=new int[40001];for(int i=0;i<40001;i++){res[i]=-1;}res[0]=1;for(int i=1;i<=n;i++){for(int j=0;res[j]!=-1;j++){res[j]*=i;}for(int j=0;res[j]!=-1;j++){if(res[j]>10){put=res[j]/10;res[j]%=10;if(res[j+1]==-1){res[j+1]=0;}res[j+1]+=put;}}}for(int i=40000;i>=0;i--){if(res[i]!=-1){System.out.print(res[i]);}}System.out.println();n=sc.nextInt();}}}
乘数1*乘数2   乘数2是不像小学那样分开的  是整体计算
思路:用data数组来存放阶乘的每一位数字,首先令第一位的数值为1,位数为1,然后将每次相乘的乘积存回数组,并循环处理每个数组中超过10的数,若数值超过10,则需要进位,将位数加1,原来的数除以10,商数加前一位数的数值后存回前一位数的数组中,再将余数存回原来位数的数组中。例如求5!的值步骤一:1!=1位数1数组内容0     0      0      1步骤二:2!=2*1!=2位数1数组内容0      0      0     2步骤三:3!=3*2!=3*2=6位数1数组内容0      0      0     6步骤四:4!=4*3!=4*4=24位数1数组内容0      0      0     24因为24大于10,需要进位data[1]=data[1]+data[0]/10=0+2=2data[0]=data[0]%10=4所以数组内容为0     0      2      4位数2步骤五:5!=5*4!=5*24=120位数2数组内容为0      0     2*5      4*5即0      0      10     20因为data[0]大于10,需要进位data[1]=data[1]+data[0]/10=10+2=12data[0]=data[1]%10=0此时数组内容为0     0      12     0data[2]=data[2]+data[1]/10=0+1=1data[1]=data[1]%10=2位数加1数组内容为0     1      2      0
参考:<a target=_blank href="http://blog.163.com/mq_wei/blog/static/14089115920101014105531274/" target="_blank">点击打开链接</a>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 大数 数组