码迷,mamicode.com
首页 > 编程语言 > 详细

java BigInteger BigDicimal例题

时间:2018-10-25 23:45:18      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:函数   ==   live   img   div   scanner   情况下   sys   image   

需要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例题

标签:函数   ==   live   img   div   scanner   情况下   sys   image   

原文地址:https://www.cnblogs.com/hao-tian/p/9853576.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!