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次方的大实数

好了上代码:

  1. import java.math.*;
  2. import java.util.*;
  3.  
  4. public class Main
  5. {
  6. public static void main(String[] args)
  7. {
  8. Scanner in = new Scanner(System.in);
  9. int n,k,d,t;
  10. t = in.nextInt();
  11. for(int o = ; o < t; o++)
  12. {
  13. n = in.nextInt();
  14. k = in.nextInt();
  15. d = in.nextInt();
  16. if(n == || k == )
  17. System.out.println();
  18. else
  19. {
  20. BigInteger big = BigInteger.valueOf(n);
  21. for(int i = n-; i >= n-k+; i--)
  22. {
  23. big = big.multiply(BigInteger.valueOf(i));
  24. }
  25. BigInteger lit = BigInteger.valueOf(k);
  26. for(int i = k-; i > ; i--)
  27. {
  28. lit = lit.multiply(BigInteger.valueOf(i));
  29. }
  30. BigInteger ans = big.divide(lit);
  31. BigInteger[] temp = new BigInteger[];//!!!!!!!!!!!!!!!!!!!!!!!!!开数组
  32. BigInteger dd = BigInteger.valueOf(d);
  33. int index = ;
  34. while(true)
  35. {
  36. if(ans.compareTo(BigInteger.valueOf()) == ) break;
  37. temp[index++] = ans.mod(dd);
  38. ans = ans.divide(dd);
  39. }
  40. for(int i = index-; i>=; i--)
  41. System.out.print(temp[i]);
  42. System.out.println();
  43. }
  44. }
  45. }
  46. }

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

Coefficient Computation (大整数、Java解决)的更多相关文章

  1. 算法笔记_159:算法提高 第二大整数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 编写一个程序,读入一组整数(不超过20个),当用户输入0时,表示输入结束.然后程序将从这组整数中,把第二大的那个整数找出来,并把它打印出来 ...

  2. 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】

    3751: [NOIP2014]解方程 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 4856  Solved: 983[Submit][Status ...

  3. java 常用类库:BigInteger大整数;BigDecimal大小数(解决double精度损失);

    大整数BigInteger package com.zmd.common_class_libraries; import java.math.BigInteger; /** * @ClassName ...

  4. 【Java编程】Java中的大整数计算

    在上一篇文章中,我们实现了c语言中的大整数的运算,并且用Miller-Rabin算法实现了对大素数的测试.本来我准备用Java代码实现大整数的运算,查了一下资料发现Java中java.math的Big ...

  5. 大整数相乘问题总结以及Java实现

    最近在跟coursera上斯坦福大学的算法专项课,其中开篇提到了两个整数相乘的问题,其中最简单的方法就是模拟我们小学的整数乘法,可想而知这不是比较好的算法,这门课可以说非常棒,带领我们不断探索更优的算 ...

  6. Java开发笔记(二十九)大整数BigInteger

    早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字 ...

  7. suseoj 1207: 大整数的乘法(java, 大数相乘, C/C++, 大数相乘)

    1207: 大整数的乘法 时间限制: 1 Sec  内存限制: 128 MB提交: 7  解决: 2[提交][状态][讨论版][命题人:liyuansong] 题目描述 求两个不超过200位的非负整数 ...

  8. 自己动手写Java大整数《3》除法和十进制转换

    之前已经完毕了大整数的表示.绝对值的比較大小.取负值.加减法运算以及乘法运算. 详细见前两篇博客(自己动手写Java * ). 这里加入除法运算. 另外看到作者Pauls Gedanken在blog( ...

  9. 【老鸟学算法】大整数乘法——算法思想及java实现

    算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...

随机推荐

  1. Android首次启动时间长优化之预编译提取Odex

        提示!应用程序的安装有两种情况,第一:首次启动系统时安装.第二:系统启动完毕后安装. 本篇博文基于第一种安装场景.在系统首次启动的场景中,系统会对/system/app./system/pri ...

  2. 浅谈API网关(API Gateway)如何承载API经济生态链

    序言 API经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API成为企业连接业务的核心载体, 并产生巨大的盈利空间.快速增长的API规模以及调用量,使得企业IT在架构上.模 ...

  3. 【转】Android Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

    重构了下之前自己的一个新闻客户端,全部使用了Fragment来进行页面切换,只有一个入口Activity作为程序的启动Activity,其中有一个界面需要调用摄像头识别二维码, 于是就会用到Surfa ...

  4. [BZOJ 2006] 狼抓兔子

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1001 [算法] 最小割 [代码] #include<bits/stdc++.h ...

  5. kubernetes Traefik ingress配置详解

    理解Ingress 简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上.Ingress相当于nginx.apache等负载均衡方向代 ...

  6. PCB 第一个node.js应用

    一.Node安装地址: https://nodejs.org/zh-cn/ 二.Node第一个应用实例 启动webnode.js应用: node webnode.js webnode.js代码: va ...

  7. json-server的关系图谱详解(Relationships)

    json-server的关系图谱 json-server是非常好用的一款模拟REST API的工具,文档也很详细和全面.详情:json-server而其中的关系图谱是它非常强大的一个功能,可以非常方便 ...

  8. js产生随机数教程

    <script>   function GetRandomNum(Min,Max){   var Range = Max - Min;   var Rand = Math.random() ...

  9. akka设计模式系列-慎用ask

    慎用ask应该是Akka设计的一个准则,很多时候我们应该禁用ask.之所以单独把ask拎出来作为一篇博文,主要是akka的初学者往往对ask的使用比较疑惑. "Using ask will ...

  10. linux安装/卸载mysql

    其实安装mysql差不多有10次了吧, 但是每次都有坑,各种百度,太麻烦了,所以这次把坑给记录下来,下次直接用. 1. 去官网下载mysql.这里可以使用wget下载.先去官方网站,找到mysql5. ...