利用数组实现大数的阶乘
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对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统