题意:求c的n次幂……要求保留所有小数……
解法:java大数+模拟。第一次写java大数……各种报错各种exception……ORZ
没有前导0和小数后面的补位0,整数的话不输出小数点,wa点就这些···被整数后面的小数点坑死了···
代码:
放渣代码……
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); while(cin.hasNext()) { String s; int n; s = cin.next(); n = cin.nextInt(); String s1 = ""; int len = s.length(); int x = -1; for(int i = 0; i < len; i++) { if(s.charAt(i) != ‘.‘) s1 += s.charAt(i); else x = i; }//去掉输入中的小数点,并记录小数点出现在第几位 BigInteger ans = new BigInteger(s1); ans = ans.pow(n);//计算去小数点后的整数的n次幂 if(x == -1)//如果没出现小数点说明输入是整数 System.out.println(ans); else { x = 5 - x;//计算小数点后有几位 x *= n;//计算积的小数点后有几位 boolean flag = false; String s2 = ans.toString(); len = s2.length(); String res = ""; for(int i = len - 1, j = 0; (i >= 0) || (j < x); i--, j++)补小数点并去掉多余的0 { if(i < 0) res += ‘0‘; else { if(s2.charAt(i) == ‘0‘) { if(flag) res += s2.charAt(i); } else { res += s2.charAt(i); flag = true; } } if(j + 1 == x) { if(flag) res += ‘.‘; flag = true; } } flag = false; len = res.length(); for(int i = len - 1; i >= 0; i--) { if(res.charAt(i) == ‘0‘)//去前导0 { if(flag) System.out.print(res.charAt(i)); } else { System.out.print(res.charAt(i)); flag = true; } } System.out.println(""); } } } }
原文:http://www.cnblogs.com/Apro/p/4357200.html