HDU高精度总结(java大数类)

  HDU1002   A + B Problem II

【题意】大数相加

【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1002

Sample Input

2
1 2
112233445566778899 998877665544332211

Sample Output

Case 1:
1 + 2 = 3

Case 2:
112233445566778899 + 998877665544332211 = 1111111111111111110

代码:

import java.io.*;
import java.util.*;
import java.math.BigInteger;//声明BigInteger大数类
import java.lang.*;
public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int t,i=1;
        t = cin.nextInt();
        int tot = 0;
        BigInteger a,b,c; //BigInteger类型
        while (i<=t)
        {
            a=cin.nextBigInteger();
            b=cin.nextBigInteger();
            c=a.add(b);
            System.out.println("Case "+i+":");
            System.out.println(a+" + "+b+" = "+c);
            if(i<t) System.out.println("");
            i++;
        }
    }
}

HDU1042 N!

【题意】大数阶乘

【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1042

Sample Input

1
2
3

Sample Output

1
2
6

代码:

import java.io.*;
import java.util.*;
import java.math.BigInteger;//声明BigInteger大数类
import java.lang.*;
public class FF
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext())
        {
         int n=cin.nextInt();
         BigInteger ans=BigInteger.ONE;
         for(int i=1; i<=n; ++i)
         {
        	ans=ans.multiply(BigInteger.valueOf(i));
         }
         System.out.println(ans);
         System.gc();	//调用垃圾回收机制
        }
    }
}

HDU 1047 Integer Inquiry

【题意】多个大数相加

【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1047

Sample Input

1

123456789012345678901234567890
123456789012345678901234567890
123456789012345678901234567890
0

Sample Output

370370367037037036703703703670

注意下格式

代码:

import java.io.*;
import java.util.*;
import java.math.BigInteger;//声明BigInteger大数类
import java.lang.*;
public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n=cin.nextInt();
        while(n-->0)
        {
         BigInteger a,b,c;
         b=BigInteger.ZERO;
         while(cin.hasNextBigInteger())
         {
        	 c=BigInteger.ZERO;
        	 c=cin.nextBigInteger();
        	 if(!c.equals(BigInteger.valueOf(0)))
        		 b=b.add(c);
        	 else
        	 {
        		 System.out.println(b);
        		 if(n!=0)
        			 System.out.println("");
        		 break;
        	 }
         }
         System.gc();
        }
    }
}

HDU 1715  大菲波数

【题意】RT

【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1715

Sample Input

5
1
2
3
4
5

Sample Output

1
1
2
3
5

代码:

import java.io.*;
import java.util.*;
import java.math.BigInteger;//声明BigInteger大数类
import java.lang.*;
public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        int n=cin.nextInt();
         BigInteger fac[]= new BigInteger[1001];
        fac[0]=BigInteger.ZERO;//初始赋值
        fac[1]=BigInteger.ONE;
        for(int i=2; i<=1000; ++i) fac[i]=fac[i-1].add(fac[i-2]);
        while(n-->0)
        {
        	int a;
        	a=cin.nextInt();
        	System.out.println(fac[a]);
        }
         //System.gc();
    }
}

HDU 1063  Exponentiation

【题意】高精度幂

【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1063

Sample Input

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12

Sample Output

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

最简形式是去掉后面的 0,以及小于 1 的小数的小数点前的 0

实现高精度幂java方法:

(1)调用pow函数

(2)for循环

代码:

import java.io.*;
import java.util.*;
import java.math.BigDecimal;
import java.math.BigInteger;//声明BigInteger大数类
import java.lang.*;
public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        while(cin.hasNext())
        {
        BigDecimal ans=cin.nextBigDecimal();
        int n=cin.nextInt();
        String res=ans.pow(n).stripTrailingZeros().toPlainString();//整数去掉小数点和后面的0
       if(res.startsWith("0"))//去掉前导0
           {
        	   res=res.substring(1);
           }
           System.out.println(res);
      /*  BigDecimal a=BigDecimal.ONE;
        int n=cin.nextInt();
        for(int i=1; i<=n; ++i)
        	a=a.multiply(ans);
        String res=a.stripTrailingZeros().toPlainString();
           if(res.startsWith("0"))
           {
        	   res=res.substring(1);
           }
           System.out.println(res);
       */
        }
    }
}

HDU 1316   How Many Fibs?

【题意】区间fibonacci

【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1316

Sample Input

10 100
1234567890 9876543210
0 0

Sample Output

5
4

代码:

import java.io.*;
import java.util.*;
import java.math.BigDecimal;
import java.math.BigInteger;//声明BigInteger大数类
public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        BigInteger a,b;
        int ans,i;
        BigInteger fac[]=new BigInteger[1005];
        BigInteger zero=BigInteger.ZERO;
        fac[1]=BigInteger.valueOf(1);
        fac[2]=BigInteger.valueOf(2);
        for(i=3; i<1005; ++i) fac[i]=fac[i-1].add(fac[i-2]);
        while(cin.hasNextBigInteger())
        {
           a=cin.nextBigInteger();
           b=cin.nextBigInteger();
           if(a.compareTo(zero)==0&&b.compareTo(zero)==0) break;
           for(ans=0,i=1; i<1005; ++i)
           {
        	   if(a.compareTo(fac[i])<=0&&b.compareTo(fac[i])>=0) ans++;
        	   if(b.compareTo(fac[i])<0) break;
           }
          System.out.println(ans);
        }
    }
}

HDU 1753   大明A+B (高精度)

【题意】高精度小数相加

【链接】http://acm.hdu.edu.cn/showproblem.php?pid=1753

Sample Input

1.1 2.9
1.1111111111 2.3444323343
1 1.1

Sample Output

4
3.4555434454
2.1

代码:

import java.io.*;
import java.util.*;
import java.math.BigDecimal;
import java.math.BigInteger;//声明BigInteger大数类
public class Main
{
    public static void main(String args[])
    {
        Scanner cin = new Scanner(System.in);
        BigDecimal a,b,c;
        while(cin.hasNextBigDecimal())
        {
        	a=cin.nextBigDecimal();
        	b=cin.nextBigDecimal();
        	c=a.add(b);
        	String res=c.stripTrailingZeros().toPlainString();
        	System.out.println(res);
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 06:59:39

HDU高精度总结(java大数类)的相关文章

多校第六场 HDU 4927 JAVA大数类

题目大意:给定一个长度为n的序列a,每次生成一个新的序列,长度为n-1,新序列b中bi=ai+1?ai,直到序列长度为1.输出最后的数. 思路:这题实在是太晕了,比赛的时候搞了四个小时,从T到WA,唉--对算组合还是不太了解啊,现在对组合算比较什么了-- import java.io.*; import java.math.*; import java.util.*; public class Main { public static void main(String[] args) { Sca

HDU 5047 Sawtooth (JAVA大数类)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 题面: Sawtooth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1636    Accepted Submission(s): 637 Problem Description Think about a plane: ● O

Java大数类介绍

java能处理大数的类有两个高精度大整数BigInteger 和高精度浮点数BigDecimal,这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal;或者import java.math.*; 下面从几个方面对BigInteger和BigDecima做一个简单的比较: 一.常量 BigInteger:ONE,ZERO,TEN分别代表1,0,10. 其定义类似于:pub

java大数类操作以及应用(UVA)

首先,先看看java大数的基本操作 Ⅰ基本函数: 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3; BigInteger b=BigInteger.valueOf(a); 则b=3; String s="12345"; BigInteger c=BigInteger.valueOf(s); 则c=12345: 2.add(); 大整数相加 BigInteger a=new BigInteger("23"); BigIntege

JAVA大数类—基础操作(加减乘除、取模、四舍五入、设置保留位数)

当基础数据类型长度无法满足需求时可以使用大数类 构造方法接受字符串为参数 1 BigInteger bInt = new BigInteger("123123"); 2 BigDecimal bDouble = new BigDecimal("123123.123123124"); 基础操作(取模使用divideAndRemainder方法,返回的数组第二个元素为余数): BigDecimal在做除法时必须设定传入精度(保留多少位小数),否则会出现异常:java.l

hdu 1042 N! java大数及判断文件末尾

N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 73503    Accepted Submission(s): 21308 Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in on

HDU 5050 Java 大数类+读入二进制

http://acm.hdu.edu.cn/showproblem.php?pid=5050 才知道 原来JAVA这么好用,连二进制都封装好了 in.nextBigInteger(2)  就是按二进制读入 当然a.gcd(b).toString(2)  是按二进制输出一个二进制String,  a,b是大数 另外,JAVA交代码原来是class Main import java.math.BigInteger; import java.util.Scanner; public class Mai

HDU 1212 Big Number(C++ 大数取模)(java 大数类运用)

Big Number 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212 --每天在线,欢迎留言谈论. 题目大意: 给你两个数 n1,n2.其中n1 很大很大,n1%n2的值. 知识点: ①秦九韶公式:例:1314= ((1*10+3)*10+1)*10+4 ②(a*b)%c == (a%c)*(b%c) .(a+b)%c == (a%c)+(b%c) . 思路: 每步取模即可. C++ AC代码: 1 #include <iostream>

Java 大数类BigInteger和BigDecimal的基本函数

在Java中有两个类BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运算变得很简单,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大. 这两个类都在java.math.*包中,因此每次必须在开头处引用该包. Ⅰ基本函数: 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3; BigInteger