Problem1001



/**
 * Description
 * 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 <= 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 R^n. Leading zeros should be suppressed in the output. Insignificant trailing zeros must not be printed. Don't print the decimal point if the result is an integer.
 * 
 * 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
 */


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String s = null;
		try {
			while ((s = br.readLine()) != null) {
				StringTokenizer st = new StringTokenizer(s);
				BigDecimal a = new BigDecimal(st.nextToken());
				int i = Integer.parseInt(st.nextToken());
				String s2;
				if (i == 0)
					//阶乘0时直接输出1
					s2 = "1";
				else if (i == 1)
					//阶乘1时输出原数(不使用科学计数法)
					s2 = a.toPlainString();
				else
					//计算阶乘
					s2 = a.pow(i).toPlainString();
				if (s2.startsWith("0")) {
					//去整数0
					s2 = s2.substring(1);
				}
				while ((s2.endsWith("0") && s2.contains("."))
						|| s2.endsWith(".")) {
					//去尾数0或无意义的小数点
					s2 = s2.substring(0, s2.length() - 1);
				}
				if (s2.length() == 0) {
					//所有操作后若字符串为空,则该数为0
					s2 = "0";
				}
				System.out.println(s2);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}




这是一求阶乘的题目,我的想法咧,用BigDecimal把结果求出来先,然后用toPlainString得到完整的值(默认貌似是科学计数法表示的),最后是按题目要求把值按格式输出

你可能感兴趣的:(java)