您的位置:首页 > 编程语言 > Java开发

java BigInteger,BigDecimal学习

2015-10-20 18:37 561 查看
java里的BigInteger和BigDecimal是很好的东东,很大程度上把人从高精度的编码中解脱了出来。

相关博客:

BigInteger:

http://blog.csdn.net/thearcticocean/article/details/49280645

BigDecimal:

http://www.apihome.cn/api/java/BigDecimal.html

一些练习:

nyist 73 比大小

http://acm.nyist.net/JudgeOnline/problem.php?pid=73

import java.util.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner (System.in);
BigInteger a,b;
while(cin.hasNext()){
a=cin.nextBigInteger();
b=cin.nextBigInteger();
if(a.equals(BigInteger.ZERO)&&b.equals(BigInteger.ZERO))	break;
int res=a.compareTo(b);
if(res==-1){
System.out.println("a<b");
}
else if(res==0){
System.out.println("a==b");
}
else System.out.println("a>b");
}
}
}


nyist 103 A+B Problem II

http://acm.nyist.net/JudgeOnline/problem.php?pid=103

import java.util.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner (System.in);
int t,ca=1;
t=cin.nextInt();
while(t>0){
t--;
BigInteger a,b;
a=cin.nextBigInteger();
b=cin.nextBigInteger();
System.out.printf("Case %d:\n",ca++);
System.out.println(a+" + "+b+" = "+(a.add(b)));
}
}
}


51nod 1029 大数除法
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1029

import java.util.*;
import java.math.BigInteger;
public class Main {

public static void main(String[] args) {
BigInteger a,b;
Scanner cin=new Scanner (System.in);
while(cin.hasNext()){
a=cin.nextBigInteger();
b=cin.nextBigInteger();
System.out.println(a.divide(b));
System.out.println(a.remainder(b));
}
}
}


nyist 28 大数阶乘
http://acm.nyist.net/JudgeOnline/problem.php?pid=28

import java.util.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n;
BigInteger ans=BigInteger.ONE;
while(sc.hasNext()){
n=sc.nextInt();
for(int i=1;i<=n;i++){
ans=ans.multiply(BigInteger.valueOf(i));
}
System.out.println(ans);
}
}

}


51nod 1030 大数进制转换
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1030

import java.util.*;
import java.math.BigInteger;
public class Main{
public static void main(String[] args) {
String str="";
Scanner cin=new Scanner (System.in);
while(cin.hasNext()){
str=cin.nextLine();
String ans=new BigInteger(str,36).toString(10);
System.out.println(ans);
}
}
}


nyist 114 某种序列
http://acm.nyist.net/JudgeOnline/problem.php?pid=114

描述:数列A满足An = An-1 + An-2 + An-3, n >= 3。编写程序,给定A0,
A1 和 A2, 计算A99
原来的思路:


  


发现反正涉及到大数,避开不了,那就用java大数水吧。

import java.util.*;
import java.math.BigInteger;
public class Main {

public static void main(String[] args) {
Scanner cin=new Scanner (System.in);
BigInteger []a=new BigInteger [5];
while(cin.hasNext()){
a[0]=cin.nextBigInteger();
a[1]=cin.nextBigInteger();
a[2]=cin.nextBigInteger();
for(int i=3;i<=99;i++){
a[3]=a[2].add(a[1]);
a[3]=a[3].add(a[0]);
a[0]=a[1];
a[1]=a[2];
a[2]=a[3];
}
System.out.println(a[2]);
}
}
}


nyist 45 棋盘覆盖

http://acm.nyist.net/JudgeOnline/problem.php?pid=45

分析:理性分析看不出来,直接找规律,


import java.util.*;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
int m,k;
Scanner sc=new Scanner (System.in);
m=sc.nextInt();
while(m>0){
m--;
BigInteger ans=BigInteger.ONE;
k=sc.nextInt();
for(int i=1;i<=k;i++){
ans=ans.multiply(BigInteger.valueOf(4));
}
ans=ans.subtract(BigInteger.valueOf(1));
ans=ans.divide(BigInteger.valueOf(3));
System.out.println(ans);
}
}
}
做题过程中发现,用含有包语句的代码提交后出现RE,必须除去它。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: