作为一名应届毕业生,算法不是那么的大神,但充分体现了我半个数学生的身份,hhhhh,我们知道杨辉三角每个数等于它上方两个数之和,刚开始我就很老实,搞了一个二维数组列出杨辉三角n行的所有数,后来我发现当n大于一定值后就会数组溢出,作为一名半个数学系的人我怎么可以忍受得了这个限制,然后我发现杨辉三角第n行第m列的值无C(n-1,m-1),那为何不用这个公式求解。用这个公式那就要牵扯到阶乘的问题,但是吧,int类型只能求20 以内的阶乘,long类型只能求到50以内的阶乘,这又有的限制,那现在只好研究研究大数阶乘的问题,enmmmmm,这下就成了大数阶乘大数相除的算法研究了,我是利用数组存数据,然后利用数组进行大数相乘以及大数相除;话不多说,上代码。欢迎大家来讨论更优化的算法。
这里写代码片
public class GetYangShuZhi {
//杨辉三角第n行第m列的值为C(n-1,m-1)=n!/m!*(n-m)!
public static String getYSnumber(int n,int m)
{
n–;
m–;
int[] beichushu;
int[] chushu;
if(n-m>=m){
beichushu = Getnumber.method(n, n-m+1);//获取被除数
System.out.print("被除数");
for(int i=0;i<beichushu.length;i++){
System.out.print(beichushu[i]);
}
System.out.println();
System.out.print("除数");
chushu = Getnumber.method(m, 1);
for(int i=0;i<chushu.length;i++){
System.out.print(chushu[i]);
}
System.out.println();
}else{
beichushu = Getnumber.meth