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))); } } }
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)); } } }
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); } } }
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); } } }
http://acm.nyist.net/JudgeOnline/problem.php?pid=114
发现反正涉及到大数,避开不了,那就用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]); } } }
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,必须除去它。