UVA369 Combinations JAVA代码

这道题目的解题在于将C运算简化,如果直接按照公式C =N!/((N − M)! × M!)来计算,会超出储存范围,正如题目中讲到的100!= 93,326,215,443,944,152,681,699,238,856,266,700,490,715,968,264,381,621,
468,592,963,895,217,599,993,229,915,608,941,463,976,156,518,286,253,
697,920,827,223,758,251,185,210,916,864,000,000,000,000,000,000,000,000,
我们要做的,就是将分子和分母化简,判断N!除以(N-M)!还是M!,当除了一个除数后,阶乘就可以存入double了,下面贴代码

package com.company;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
	    int m,n,bigger,smaller;
	    double numerator,denominator;//分别是分子和分母
	    Scanner in = new Scanner(System.in);
	    while(in.hasNext())
        {
            n=in.nextInt();
            m=in.nextInt();
            if(n==0)
                break;
            if((n-m)<m)
            {
                bigger=m;
                smaller=n-m;
            }
            else
            {
                bigger=n-m;
                smaller=m;
            }
            numerator=1;
            denominator=1;
            for(int i=n;i>bigger;i--){
                numerator*=i;
            }
            for(int i=1;i<=smaller;i++){
                denominator*=i;
            }
            DecimalFormat df = new DecimalFormat("0");//Java控制输出数字小数点后几位的控制类,如果要输出后两位,则写“0.00”
            System.out.println(n+" things taken "+m+" at a time is "+df.format(numerator/denominator)+" exactly.");
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值