大数类题目——————JAVA实现

版权声明:转载请注明出处 https://blog.csdn.net/Hpuer_Random/article/details/83663194

HDU 1002 A + B Problem II

直接写就好了,不过格式有些麻烦

import java.math.*;
import java.util.*;
public class HDU1002{
	public static void main(String[] args){
		Scanner cin = new Scanner(System.in);
		int t = cin.nextInt();
		int num = 1;
		int x=0;
		while(t>0){
			if(x!=0)	System.out.println("");
			else x=1;
			BigInteger a = cin.nextBigInteger();
			BigInteger b = cin.nextBigInteger();
			System.out.println("Case "+num+":");
			System.out.println(a+" + "+b+" = "+a.add(b));
//			System.out.println("Case "+num+":\n"+a+" + "+b+" = " +a.add(b));
			//写着一句话Wa了好多次,我现在有些怀疑println和"\n"不一样。
			num++;			
			t--;
		}
	}
}


POJ 2506 Tiling

推出公式:
d p [ n ] = d p [ n 1 ] + 2 d p [ n 2 ] \Large dp[n]=dp[n-1]+2*dp[n-2]

不过JAVA写大数还真是方便 因为懒


import java.util.*;
import java.math.*;//得有这个库
public class Main{
	public static void main(String[] agrs){
		Scanner cin = new Scanner(System.in);
		BigInteger[] a = new BigInteger[300];//定义大数数组
		a[0] = BigInteger.ONE;//初始化
		a[1] = BigInteger.ONE;//初始化
		a[2] = a[1].add(a[0].add(a[0])); 
		for(int i=3;i<=299;i++)
			a[i] = a[i-1].add(a[i-2].add(a[i-2]));
		while(cin.hasNext()){
			int n = cin.nextInt();
			System.out.println(a[n]);
		}
	}		
}	


HDU 1042 N!

求最大是 10000! 肯定得用大数来解决

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


HDU 1047 Integer Inquiry

多个大数相加,不过哦需要注意一下输入输出格式,
n组数据,每两个输出之间有一个空行

import java.math.*;
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        int n = cin.nextInt();
        while(n-->0){
            BigInteger ans = BigInteger.ZERO;
            BigInteger x;
            while(cin.hasNextBigInteger()){
                x = BigInteger.ZERO;
                x = cin.nextBigInteger();
                if(!x.equals(BigInteger.valueOf(0)))
                    ans = ans.add(x);
                else{
                    System.out.println(ans);
                    if(n!=0)
                        System.out.println("");
                    break;
                }
            }
        }
        System.gc();
    }
}



HDU 1715 大菲波数

import java.math.*;
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        BigInteger[] a;
        a = new BigInteger[2000];
        a[0] = BigInteger.ZERO;
        a[1] = BigInteger.ONE;
        for(int i=2;i<1005;i++)
            a[i] = a[i-1].add(a[i-2]);
        int  n = cin.nextInt();
        while(n-->0){
            int i = cin.nextInt();
            System.out.println(a[i]);
        }
    }
}


HDU 1063 Exponentiation

浮点数的幂,需要注意输出格式
0.123 输出为 .123

import java.math.*;
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext()){
            BigDecimal a = cin.nextBigDecimal();//输入大浮点数
            int n = cin.nextInt();
            String res = a.pow(n).stripTrailingZeros().toPlainString();//去掉整数后的小数点和多余的0
            if(res.startsWith("0"))
                res = res.substring(1);    //去掉前导0                    
            System.out.println(res);
        }
    }
}


HDU 1753 大明A+B

大浮点数相加

import java.util.*;
import java.math.*;
public class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        BigDecimal a,b;
        while(cin.hasNext()){
            a = cin.nextBigDecimal();
            b = cin.nextBigDecimal();
            String res = a.add(b).stripTrailingZeros().toPlainString();
            System.out.println(res);
        }
    }
}


HDU 1316 How Many Fibs?

求区间【a,b】中有多少个斐波那契数

import java.util.*;
import java.math.*;
public class Main{
    public static void main(String[] args){
        Scanner cin = new Scanner(System.in);
        BigInteger[] a  = new BigInteger[3000];
        a[0] = new BigInteger("1");
        a[1] = new BigInteger("1");
        for(int i=2;i<=500;i++)
            a[i] = a[i-1].add(a[i-2]);
        BigInteger x, y;

        while(cin.hasNext()){
            x = cin.nextBigInteger();
            y = cin.nextBigInteger();
            if(x.compareTo(BigInteger.ZERO)==0 && y.compareTo(BigInteger.ZERO)==0)    break;
            int ans = 0;
            for(int i=1;i<=500;i++){
                if(x.compareTo(a[i]) <= 0 && y.compareTo(a[i]) >= 0)    ans++;
                if(y.compareTo(a[i]) < 0)    break;
            }    
            System.out.println(ans);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/Hpuer_Random/article/details/83663194
今日推荐