首页 > 代码库 > 大数问题,通常用JAVA
大数问题,通常用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]); } } }
HDU1865
分析(转):
简单递推+大数。
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。