课后作业,接乘的计算

1、程序设计思想

设置方法1,2,3。输入n和k的值,分别计算结果。

方法一:计算n!的值并且代入公式计算。

方法二:输出(n+1)*(n+1)的杨辉三角,第n+1行的第k+1个数字即为所求。

方法三:判断k是否为1,是返回n,不是的话判断n-k的值,是的话返回n的值,不是的话计算danyuan=digui(a-1,b-1).add(digui(a-1,b));

2、程序流程图

3、程序源代码

package java作业;

import java.math.BigInteger;
import java.util.Scanner;

public class jiecheng
{
static Scanner sc=new Scanner(System.in);
public static void main(String args[])
{
int a,b;
int[][] er;
BigInteger san;
System.out.print("请输入n:");
a=sc.nextInt();
System.out.print("请输入k:");
b=sc.nextInt();
//方法一
System.out.print("方法一:");
zuhe(a,b);
//方法三
System.out.print("方法三:");
san=digui(a,b);
System.out.println(san);
//方法二
System.out.println("方法二:");
er=ditui(a+1);
for(int heng=0;heng<a+1;heng++)
for(int shu=0;shu<a+1;shu++)
{
if(heng>shu)
System.out.print(er[heng][shu]+" ");
if(heng==shu)
System.out.println(er[heng][shu]);
}
}
static int[][] ditui(int a)
{
int[][] yanghui=new int[a][a];
for(int ha=0;ha<a;ha++)
{
yanghui[ha][0]=1;
yanghui[ha][ha]=1;
}
for(int heng=2;heng<a;heng++)
for(int shu=1;shu<a;shu++)
{
if(heng>shu)
yanghui[heng][shu]=yanghui[heng-1][shu-1]+yanghui[heng-1][shu];
}
return yanghui;
}
static BigInteger digui(int a, int b)
{

BigInteger danyuan;
BigInteger n,k;
danyuan=BigInteger.valueOf(a);
n=BigInteger.valueOf(a);
k=BigInteger.valueOf(b);
if(b!=1)
{
while(a-b==1)
{
return danyuan;
}
danyuan=digui(a-1,b-1).add(digui(a-1,b));
}
else
danyuan=n;
return danyuan;
}
static void zuhe(int a,int b)
{
int haha;
BigInteger n,k;
BigInteger danwei;
danwei=BigInteger.valueOf(1);
n=BigInteger.valueOf(a);
k=BigInteger.valueOf(b);
BigInteger fenmu;
fenmu=BigInteger.valueOf(1);
BigInteger zhongzhuan;
zhongzhuan=BigInteger.valueOf(1);
haha=zhongzhuan.compareTo(n);
//计算分母
while(haha==-1||haha==0)
{
fenmu=fenmu.multiply(zhongzhuan);
zhongzhuan=zhongzhuan.add(danwei);
haha=zhongzhuan.compareTo(n);
}
//计算分子第一部分
BigInteger fenzi;
fenzi=BigInteger.valueOf(1);
BigInteger first;
first=BigInteger.valueOf(1);
zhongzhuan=BigInteger.valueOf(1);
haha=zhongzhuan.compareTo(k);
while(haha==-1||haha==0)
{
first=first.multiply(zhongzhuan);
zhongzhuan=zhongzhuan.add(danwei);
haha=zhongzhuan.compareTo(k);
}
//计算分子第二部分
BigInteger mid;
mid=n.subtract(k);;
BigInteger second;
second=BigInteger.valueOf(1);
zhongzhuan=BigInteger.valueOf(1);
haha=zhongzhuan.compareTo(mid);
while(haha==-1||haha==0)
{
second=second.multiply(zhongzhuan);
zhongzhuan=zhongzhuan.add(danwei);
haha=zhongzhuan.compareTo(mid);
}
fenzi=first.multiply(second);
System.out.println(fenmu.divide(fenzi));
}
}

4、截图

 

posted @ 2017-10-14 00:26  你说你好  阅读(267)  评论(0编辑  收藏  举报