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

本文详细介绍了使用Java处理大数运算的多种算法题解,包括加法、乘法、幂运算等,并通过具体实例展示了如何利用BigInteger和BigDecimal类解决大数运算问题。文章覆盖了HDU1002、HDU1042、HDU1047等多个经典算法题目,深入探讨了大数数组的初始化、循环迭代、输入输出格式等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HDU 1002 A + B Problem II

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

import java.math.*;
import java.util.*;
public class Main{
	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] dp[n]=dp[n1]+2dp[n2]

不过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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值