ACM中的大数问题用Java的大数类敲方便快捷,而且极其容易上手!!!
本节针对java的大数类在ACM中的用法做简单的讲解。
如对Java中的一些基础用法不了解的去前一节看看~
http://blog.csdn.net/why850901938/article/details/51050735
资料均注明来源,侵删!
1.简介:
Java中两个类BigDecimal(表示浮点数)和BigInteger(表示整数);
分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数)。
主要用于高精度计算中。这两个类使得java中的大数,高精度运算变得很简单。
使用时注意每个单词首字母大写~新手很容易犯这个错/(ㄒoㄒ)/~~
使用这两个类的时候需要加上包 import java.math.*;
或是直接打:
import java.math.BigInteger;
import java.math.BigDecimal;
2.声明与赋值
通常以这种方法声明:
BigInteger a;
BigDecimal b;
也可将声明和赋值写在一起:
BigDecimal a=new BigDecimal("0");
还有常用的常量赋值方法:
A=BigInteger.ONE //=1
B=BigInteger.TEN //=10
C=BigInteger.ZERO //=0
相当于:
BigInteger A = BigInteger.valueOf(1);
BigInteger B = BigInteger.valueOf(10);
BigInteger C = BigInteger.valueOf(0);
valueOf(),可将数据转换为指定类型:
具体用法如下;
int a = 3;
BigInteger b = BigInteger.valueOf(a);
//即b = 3;(int)
2.输入方法:
主要是Scanner类,具体参见上一节内容http://blog.csdn.net/why850901938/article/details/51050735
不在此赘述了;
例:
while(cin.hasNext()) //等同于!=EOF
{
int n;
BigInteger m;
n=cin.nextInt(); //读入一个int;
m=cin.BigInteger();//读入一个BigInteger;
System.out.print(m.toString());
System.out.print(m);
}
例引: http://m.2cto.com/kf/201312/265886.html
3.一些基础运算:
add();//
substract(); //减法
multiply(); //乘法
divided(); //相除取整
remainder(); //取余
pow(); //a.pow(b) = a ^ b
gcd(); //最大公约数
abs(); //绝对
negate(); //取反数
mod(); //a.mod(b) = a % b = a.remainder(b)
max(); min();
compareTo(); //比较
equals(); //比较是否相等
a+b的例子:
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
BigInteger a, b;
int T;
Scanner in = new Scanner(System.in);
T = in.nextInt();
for (int i = 1; i <= T; ++i) {
System.out.println("Case" + " " + i + ":");
a = in.nextBigInteger();
b = in.nextBigInteger();
if (i < T) {
System.out.println(a + " + " + b + " = " + a.add(b) );
System.out.println();
} else {
System.out.println(a + " + " + b + " = " + a.add(b));
}
}
}
}
a+b浮点数的例子:
import java.util.*;
import java.math.*;
public class Main{
public static void main(String []args){
BigDecimal a;
BigDecimal b;
a=new BigDecimal("0");
b=new BigDecimal("0");
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
a=a.add(b);
String str=a.stripTrailingZeros().toPlainString();
//stripTrailingZeros()这个方法是用来去掉末尾的0的。
//toPlainString()这个方法是使字符串大数变成普通的数字字符组成的字符串,
//如果不使用这个方法很可能数字变成了科学计数法,带E的那种。
System.out.println(str);
}
}
}
注意注释中所提到的两个说明!!!
Java大数的一些基础用法就是这些,下面还有几篇典型例题。
仅代表个人观点,欢迎交流探讨,勿喷~~~
PhotoBy:WLOP
http://weibo.com/wlop