大数问题,通常用JAVA
Posted kimsimple
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数问题,通常用JAVA相关的知识,希望对你有一定的参考价值。
e.g.
HDU1002
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); int t=cin.nextInt(); cin.nextLine(); int cnt=0; while(t!=0) { t--; String s1=cin.next(); String s2=cin.next(); BigInteger a1=new BigInteger(s1); BigInteger a2=new BigInteger(s2); System.out.println("Case "+(++cnt)+":"); System.out.print(a1+" + "+a2+" = "); System.out.println(a1.add(a2)); if(t!=0) System.out.println(); } } }
HDU1715 大斐波那契数
import java.math.BigInteger; import java.util.Scanner; public class Main { private static BigInteger[] fib; public static void f(){ fib=new BigInteger[1005]; fib[2]=new BigInteger("1"); fib[1]=fib[2]; for(int i=3;i<1005;i++) { fib[i]=fib[i-1].add(fib[i-2]); } } public static void main(String[] args) { Scanner cin=new Scanner(System.in); int t=cin.nextInt(); cin.nextLine(); int cnt=0; f(); while(t!=0) { t--; cnt=cin.nextInt(); System.out.println(fib[cnt]); } } }
分析(转):
简单递推+大数。
f[n]=f[n-1]+f[n-2]。
why?
由于数字只有‘1‘和‘2‘这两种,那么当让第n
位为1的时候,f[n]加上f[n-1];当让最后两位
合并成2的时候,f[n]加上f[n-2](因为要保证
倒数第二位一定是1)。
算出来的f就是一个斐波那契数列。
WOW ,问题转化是极为巧妙的
这种递推关系,说的严重点就是动态规划
import java.math.BigInteger; import java.util.Scanner; public class Main { private static BigInteger[] fib; public static void f(){ fib=new BigInteger[1005]; fib[1]=new BigInteger("1"); fib[0]=fib[1]; for(int i=2;i<1005;i++) { fib[i]=fib[i-1].add(fib[i-2]); } } public static void main(String[] args) { Scanner cin=new Scanner(System.in); int t=cin.nextInt(); cin.nextLine(); int cnt=0; f(); while(t!=0) { t--; String s=cin.next(); cnt=s.length(); System.out.println(fib[cnt]); } } }
以上是关于大数问题,通常用JAVA的主要内容,如果未能解决你的问题,请参考以下文章