zoukankan      html  css  js  c++  java
  • Coefficient Computation (大整数、Java解决)

    Coefficient Computation UVALive8265

    题意:计算组合数C(n,k)的值并将值按给定的进制输出。

    思路:Java大整数类硬上。

    PS:刚刚学完Java的大整数类,结果却被Java怎么开数组卡到吐血,直接后果就是少开一题,赛后学长指导后5分钟出题,真酸爽……

    1. 包:java.math.*
    2. BigInteger类实现了任意精度的整数运算。
    3. BigDecimal类实现了任意精度的浮点数运算。
    4. 读入大整数a:Scanner in = new Scanner(System.in); BigInteger a; a = in.nextBigInteger();

    定义大整数类BigInteger a,b;

    • 静态valueOf方法可以将普通的数值转换为大数值:BigInteger a = BigInteger.valueOf(100)
    • 大整数的相加a = a.add(b);表达式为a =a+ b;
    • 大整数的相减a = a.subtract(b);表达式为 a = a - b;
    • 大整数的相乘a = a.multiply(b);表达式为  a = a * b;
    • 大整数的相除a = a.divide(b);表达式为 a = a / b;
    • 大整数的取余a = a.mod(b);表达式为 a = a % b;
    • 大整数的比较a.compareTo(b);如果a与b相等则返回0,如果a大于b返回正数,如果a小于b返回 负数;
    • a.valueOf(100);返回值为100的大整数;
    • 将字符串转换成10进制大整数类型:String s = "100000000000000000000000000000000" ,BigInteger c = new BigInteger(s,10)
    • 其他操作:a.pow(b) = a^b;a.gcd(b) = a和b的最大公约数;a.abs() = a的绝对值;a.negate() = a的取反数;max(),min();
    • System.out.println(a.toString(d));将大整数a按d进制输出;

    大实数类的运算(实现方法与大整数一样):

    • BigDecimal add(BigDecimal other)相加
    • BigDecimal subtract(BigDecimal other)相减
    • BigDecimal multiply(BigDecimal other)相乘
    • BigDecimal divide(BigDecimal other RoundingMode mode) 5.0  相除,必须给出舍入方式RoundingMode.HALF_UP是在学校学习的四舍五入方式
    • BigDecimal compareTo(BigDecimal other)比较返回值和大整数一样,见上边
    • static BigDecimal valueOf( long x) 返回值为x的大实数
    • static BigDecimal valueOf(long x,int scale)返回值为x / 10的scale次方的大实数

    好了上代码:

    import java.math.*;
    import java.util.*;
    
    public class Main
    {
        public static void main(String[] args)
        {
            Scanner in = new Scanner(System.in);
            int n,k,d,t;
            t = in.nextInt();
            for(int o = 0; o < t; o++)
            {
                n = in.nextInt(); 
                k = in.nextInt();
                d = in.nextInt();
                if(n == 0 || k == 0)
                    System.out.println(1);
                else
                {
                    BigInteger big = BigInteger.valueOf(n);
                    for(int i = n-1; i >= n-k+1; i--)
                    {
                        big = big.multiply(BigInteger.valueOf(i));
                    }
                    BigInteger lit = BigInteger.valueOf(k);
                    for(int i = k-1; i > 0; i--)
                    {
                        lit = lit.multiply(BigInteger.valueOf(i));
                    }
                    BigInteger ans = big.divide(lit);
                    BigInteger[] temp = new BigInteger[50010];//!!!!!!!!!!!!!!!!!!!!!!!!!开数组
                    BigInteger dd = BigInteger.valueOf(d);
                    int index = 0;
                    while(true)
                    {
                        if(ans.compareTo(BigInteger.valueOf(0)) == 0) break;
                        temp[index++] = ans.mod(dd);
                        ans = ans.divide(dd);
                    }
                    for(int i = index-1; i>=0; i--)
                        System.out.print(temp[i]);
                    System.out.println();
                }
            }
        }
    }
    View Code

    大整数类也是一个封装好的类,所以可以开数组,但要注意开数组的格式。

  • 相关阅读:
    多测师讲解html _伪类选择器17_高级讲师肖sir
    多测师讲解html _后代选择器16_高级讲师肖sir
    多测师讲解html _组合选择器_高级讲师肖sir
    多测师讲解html _标签选择器14_高级讲师肖sir
    前端 HTML form表单标签 input标签 type属性 重置按钮 reset
    前端 HTML form表单标签 textarea标签 多行文本
    前端 HTML form表单标签 input标签 type属性 file 上传文件
    前端 HTML form表单标签 input标签 type属性 radio 单选框
    前端 HTML form表单标签 input标签 type属性 checkbox 多选框
    前端 HTML form表单目录
  • 原文地址:https://www.cnblogs.com/sykline/p/9737766.html
Copyright © 2011-2022 走看看