poj-1001 求高精度幂

Description

对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。

现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <= 25。

Input

T输入包括多组 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。

Output

对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。

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

Submit
import java.math.BigDecimal;
import java.util.*;

public class _1001 {
    public static void main(String[] args) throws InterruptedException {
        // write your code here
        Scanner cin = new Scanner(System.in);
        while (cin.hasNext()) {
            BigDecimal a = cin.nextBigDecimal();
            int b = cin.nextInt();
            String res = a.pow(b).stripTrailingZeros().toPlainString();   
            res = (res.indexOf("0.") == 0) ? (res.substring(1)) : res;
            System.out.println(res);
        }
    }
}
知识补充:

【BigDecimal是什么?】


1、简介
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

2、构造器描述 

BigDecimal(int)       创建一个具有参数所指定整数值的对象。 
BigDecimal(double) 创建一个具有参数所指定双精度值的对象。 //不推荐使用,导致计算有问题
BigDecimal(long)    创建一个具有参数所指定长整数值的对象。 
BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。//推荐使用,导致计算有问题

3、方法描述

add(BigDecimal)        BigDecimal对象中的值相加,然后返回这个对象。 
subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。 
multiply(BigDecimal)  BigDecimal对象中的值相乘,然后返回这个对象。 
divide(BigDecimal)     BigDecimal对象中的值相除,然后返回这个对象。 
toString()                将BigDecimal对象的数值转换成字符串。 
doubleValue()          将BigDecimal对象中的值以双精度数返回。 
floatValue()             将BigDecimal对象中的值以单精度数返回。 
longValue()             将BigDecimal对象中的值以长整数返回。 
intValue()               将BigDecimal对象中的值以整数返回。

4、函数 toPlainString() 和 toString()

对于 BigDecimal b ;

b=(0.4321)^ 20; 
String s = b.toPlainString() ; 
System.out.println(s) ; 
输出为: 
0.00000005148554641076956121994511276767154838481760200726351203835429763013462401

若String s = b.toString() ; 
输出为: 
5.148554641076956121994511276767154838481760200726351203835429763013462401E-8

因此我们知道:toPlainString()返回不用科学计数法、toString()返回使用科学计数法

5、java中去掉BigDecimal后无用的零

使用stripTrailingZeros().toPlainString()

BigDecimal a=new BigDecimal("0.1000");
System.out.println(a.stripTrailingZeros().toPlainString());

posted @ 2020-10-14 19:12  青癯  阅读(159)  评论(0编辑  收藏  举报