大数问题,通常用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]);
        }
        
    }
}

 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的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

Java常用类 Scanner类和大数类

Java大数BigInteger-用法记录

Java全栈JavaSE:19.常用类之大数运算日期和日历包装类

刷题常用之大数类数学类

大数运算之 Java BigInteger 的基本用法