NYOJ 155高精度计算

来源:互联网 发布:手机屏幕条纹修复软件 编辑:程序博客网 时间:2024/04/30 19:37

题意:对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 
现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R  n 次方(Rn),其中是整数并且 0 < =n <= 25

代码1:
import java.math.BigDecimal;
import java.math.MathContext;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int a;
        BigDecimal b;
        Scanner cin = new Scanner(System.in);
        while (cin.hasNextBigDecimal()) {
            b = cin.nextBigDecimal();
            a = cin.nextInt();
            b = b.pow(a);
            System.out.println(trim0(b.stripTrailingZeros().toPlainString(), false, false));
        }
    }
    public static String trim0(String num, boolean f0dot, boolean fdot0) {
        int begin = 0;
        int end = num.length() - 1;
        while (num.charAt(begin) == '0') {
            ++begin;
        }
        if (f0dot && num.charAt(begin) == '.') {
            --begin;
        }
        while (num.charAt(end) == '0') {
            --end;
        }
        if (num.charAt(end) == '.') {
            if (fdot0) {
                ++end;
            } else {
                --end;
            }
        }
        if (begin <= end) {
            return num.substring(begin, end + 1);
        } else {
            return "0";
        }
    }
}
//另一个代码:
import java.math.*;
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        while(in.hasNext()){
            BigDecimal val=in.nextBigDecimal();
            int n=in.nextInt();
            BigDecimal ret=val.pow(n).stripTrailingZeros();
            System.out.println( ret.toPlainString().replaceAll("^0", "") );
        }
    }
}

0 0