java BigInteger BigDicimal例题

Posted zangzang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java BigInteger BigDicimal例题相关的知识,希望对你有一定的参考价值。

需要import  java.math.*;

BigInteger:

add(BigInteger val);               +

subtract(BigInteger val);        -

multiply(BigInteger val);         *

divide(BigInteger val);            /

remainder(BigInteger val);    %

compareTo(BigInteger val)     <返回-1   ==返回0  >返回1

abs();   绝对值

pow(int a)   a次幂

toString()   返回十进制的字符串

toString(int p)  返回p进制的字符串

 

1.【高精度】蜜蜂路线(BigInteger add操作 BigInteger.ONE常数)

题目描述

 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N ,1≤M<N≤1000,有多少种爬行路线?<n≤1000,有多少种爬行路线?
 

技术分享图片

 

输入

M,N的值。

 

输出

一个数表示爬行路线种数。

 

分析:BigInteger 的斐波那契

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

2.【高精度】Oliver的成绩

 

import java.util.*;
import java.math.*;
 
public class Main {
    public static void main(String[] args) {
        BigInteger a,b,c,max1,max2,max3;
        BigInteger x,y,z;
        Scanner cin = new Scanner(System.in);
        a = cin.nextBigInteger();
        b = cin.nextBigInteger();
        c = cin.nextBigInteger();
         
        max1 = a;
        max2 = b;
        max3 = c;
         
        int n;
        n = cin.nextInt();
         
        for(int i=0;i<n;i++)
        {
            x = cin.nextBigInteger();
            y = cin.nextBigInteger();
            z = cin.nextBigInteger();
             
            if(max1.compareTo(x)<0)
                max1 = x;
            if(max2.compareTo(y)<0)
                max2 = y;
            if(max3.compareTo(z)<0)
                max3 = z;
        }
        BigInteger ans;
        ans = max1.subtract(a);
        System.out.print(ans+" ");
        ans = max2.subtract(b);
        System.out.print(ans+" ");
        ans = max3.subtract(c);
        System.out.print(ans);
    }
}

BigDecimal

(java新手)需要注意的:

1.stripTrailingZeros() 去零 但是会是科学计数法 

加个toPlainString()可以正常表示

2.作为java新手 才知道java中的String是不可以用下标(s[0])直接取的

而需要用函数charAt(int p)才可以取第p个字符

 问题 N: 【高精度】幂运算

其他和BigInteger差不多

题目描述

小明的老师布置了一道幂运算题:一般情况下,计算机所能够处理的小数的范围和精度都是非常有限的。老师给出了一个小数a和指数b,让小明求ab。小明觉得手算非常麻烦,希望你能帮助他。

 

输入

共2行,第1行是a,第2行是b。O<a<l000,a的长度不超过10位,保证这个数字有一个小数点,但不保证这个数字有整数部分或小数部分。比如可以用‘.’代表0,但是这个数据不会出现。例如000.10会写成.10。1≤b≤25,为整数。

 

输出

只有1行,即a^b的结果。整数部分前面有0必须去掉,小数部分末尾有0也必须去掉。例如000.10100需要变为.101(整数部分为0也去掉)。输出部分必须有一个小数点。

 

样例输入

1.0100
12

 

样例输出

1.126825030131969720661201

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

public class Main {
    public static void main(String[] args) {
        BigDecimal a;
        Scanner cin = new Scanner(System.in);
        a = cin.nextBigDecimal();
        int b = cin.nextInt();
        
        a = a.pow(b);
        String s = a.stripTrailingZeros().toPlainString();
        if(s.charAt(0)==‘0‘&&s.charAt(1)==‘.‘)  
        {
            int len = s.length();
            s = s.substring(1, len); //得到从1到len的字串
        }
        System.out.println(s);
    }
}

 

 




以上是关于java BigInteger BigDicimal例题的主要内容,如果未能解决你的问题,请参考以下文章

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

java 类型转换 String转BigInteger

BigInteger的用法

Java BigInteger类

Java 基础 -- BigInteger BigDecimai大数

[记录]java.math.biginteger cannot be cast to java.lang.long