UVa 748 / POJ 1001 Exponentiation (浮点高精度求幂&正则表达式的应用)

来源:互联网 发布:天猫美工工资一般多少 编辑:程序博客网 时间:2024/06/07 07:27

748 - Exponentiation

Time limit: 3.000 seconds

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=97&page=show_problem&problem=689

http://poj.org/problem?id=1001

Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems.

This problem requires that you write a program to compute the exact value of Rn where R is a real number (0.0 < R < 99.999) and n is an integer such that $0 < n \le 25$.

Input 

The input will consist of a set of pairs of values for R and n. The R value will occupy columns 1 through 6, and the n value will be in columns 8 and 9.

Output 

The output will consist of one line for each line of input giving the exact value of Rn. Leading zeros and insignificant trailing zeros should be suppressed in the output.

Sample Input 

95.123 120.4321 205.1234 156.7592  998.999 101.0100 12

Sample Output 

548815620517731830194541.899025343415715973535967221869852721.0000000514855464107695612199451127676715483848176020072635120383542976301346240143992025569.92857370126648804114665499331870370751166629547672049395302429448126.76412102161816443020690903717327667290429072743629540498.1075960194566517745610440100011.126825030131969720661201

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 。如果输出是整数,不要输出小数点。


参考资料:正则表达式30分钟入门教程


完整代码:

/*UVa: 0.242s*//*POJ: 125ms,3340KB*/import java.util.*;import java.math.*;import java.io.*;public class Main {static Scanner cin = new Scanner(new BufferedInputStream(System.in));public static void main(String[] args) {while (cin.hasNext()) {BigDecimal R = cin.nextBigDecimal();int n = cin.nextInt();String str = R.pow(n).stripTrailingZeros().toPlainString();// 返回移除所有尾部零的,不带指数字段的此BigDecimal的字符串表示形式if (str.indexOf("0") < str.indexOf("."))str = str.replaceFirst("^0*", "");// ^匹配字符串的开始,*表示重复零次或更多次System.out.println(str);}}}

Source

East Central North America 1988

原创粉丝点击