zoukankan      html  css  js  c++  java
  • 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());

  • 相关阅读:
    非冒泡事件的冒泡支持
    js--题目二
    js-- 一些题目
    jQuery 请指出'$'和'$.fn'的区别?或者说出'$.fn'的用途。
    jQuery 请指出'.bind()','.live()'和'.delegate()'的区别
    什么时候不能完全按照设计稿来
    edm注意细节
    响应式设计
    css -- 题目汇总
    什么是Handler(四)
  • 原文地址:https://www.cnblogs.com/apex-wzw/p/13811666.html
Copyright © 2011-2022 走看看