《用java来解决大数问题总结》

好长时间没写过指导类型的文档了,大多都是把题目黏贴上来,然后放上代码,和一些解题思路。

今天就给大家讲一下ACM中出现的大数问题的解决方法。

在做ACM题目的时候,有时就会遇见特别大的数字,远远超过了long long定义的 类型,如果是用C语言的话,需要用到数组来做,做起来得不偿失。很幸运,有java这个类库强大的语言,我们可以通过调用库函数来解决大数问题。

在解决大数问题的时候,首先需要在Main.java中引入包:import java.math.BigInteger;这个包里边包含大数的所有库函数。下面给大家介绍下比较常用的库函数(其实大家也可以自己查API文档,里边有说明的= =、)。

定义一个大数:1、BigInteger a=BigInteger.valueOf(1);注意,此时a的值为1,a是一个大数。

    2、BigInteger a;此时a尚未初始化,可以通过键盘输入一个大数:Scanner cin=new Scanner(System.in); a=cin.nextBigInteger();

大数的几个运算(假设此时有两个大数a,b)

加运算:a.add(b)    减运算a.subtract(b)   乘运算:a.multiply(b)   除运算:a.divide(b)  比较:a.compareTo(b);(a>b的话返回1)

比较是否相等:a.equals(b)   求最大公约数:a.gcd(b);  求模:a.remainder(b);

运算就说这么多,大家可以自己查API文档看看。


这里有一点特别需要注意:当你要让一个大数a和0比较是否相等的话,如果直接a.equals(0);这是错误的,你必须把0转变为大数:BigInteger b=BigInteger.valueOf(0);然后比较,a.equals(b)。这样才是正确的。

因为上面给出的所有运算中,括号内的数字必须为BigInteger类型的


文档可能描述不是太清晰,有什么疑问可以回复。


你可能感兴趣的:(ACM)