方法1:
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String d = sc.next();
int z = sc.nextInt();
BigDecimal bd = new BigDecimal(d);
BigDecimal re = new BigDecimal("1");
for(int i = 0; i < z; i++){
re = re.multiply(bd);
}
String result = re.stripTrailingZeros().toPlainString();
if(result.startsWith("0.")){
result = result.substring(1);
}
System.out.println(result);
}
}
}
方法2:
import java.util.Scanner;
public class Main {
static class BigDecimal{
//最大整型46340
private String src;
private int dotPos;
private int afterdot;
public BigDecimal(String d) {
// TODO Auto-generated constructor stub
src = d;
Double.parseDouble(src);//檢查資料是否合法
stripTrailingZeros();
dotPos = src.indexOf('.');//如果沒有就傳回-1
if(dotPos == -1)
afterdot = 0;
else
afterdot = src.length() - 1 - dotPos;
}
public BigDecimal(BigDecimal bd) {
this(bd.src);
}
@Override
public String toString() {
return src;
}
private String[] splitSrc(){
//資料: 123 4567 8888 9999
//下标: 3 2 1 0
String isrc = delDot(src);
int srcLength = isrc.length();
int arrayLength = srcLength % 4 == 0 ? srcLength / 4: srcLength/4 + 1;
String result[] = new String[arrayLength];
for(int i = 0; i < result.length; i++){
int mark = srcLength - i * 4;
result[i] = isrc.substring(mark - 4 < 0 ? 0: mark - 4, mark);//坑爹的substring();
}
return result;
}
private int getAfterDot (){//小數點後面有多少位
return afterdot;
}
private String delDot(String src){//去掉src中的小數點
String res = "" + src;
if(res.contains("."))
res = res.replace(".", "");//坑爹的replace()
return res;
}
private void correctArray(String rArray[], int currentBit){//處理進位
String sr = rArray[currentBit];
int currentInt = Integer.parseInt(sr);
String currentString = String.valueOf(currentInt);
int l = currentString.length();
if(currentInt >= 10000){//
rArray[currentBit] = sr.substring(l - 4, l);
int carry = Integer.parseInt(sr.substring(0, l - 4));
int upBitValue = Integer.parseInt(rArray[currentBit + 1]);
rArray[currentBit + 1] = "" + (carry + upBitValue);
}else if(currentInt < 1000){//增加字首0
int n = 4 - l;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < n; i++){
sb.append("0");
}
rArray[currentBit] = sb.append(sr).toString();
}
}
public BigDecimal multiply(BigDecimal bd) {
String srcs[] = splitSrc();
String bds[] = bd.splitSrc();
int resultDotPos = getAfterDot() + bd.getAfterDot();
int resultBitTotal = bds.length + srcs.length;
String result[] = new String[resultBitTotal];//目前結果。初始化為null
for(int fr = 0; fr < resultBitTotal; fr++){
result[fr] = "0";
}
int currentBit = 0;//目前計算的結果應該放在哪個結果位
for(int i = 0; i < srcs.length; i++){
int srcInner = Integer.parseInt(srcs[i]);
for(int j = 0; j < bds.length; j++){
currentBit = i + j;//目前結果應該放在第幾結果位
int bdInner = Integer.parseInt(bds[j]);
int cuIntResult = srcInner * bdInner;//目前計算結果。
int existValue = Integer.parseInt(result[currentBit]);//已經存在的結果
int cr = existValue + cuIntResult;//結果合并
result[currentBit] = "" + cr;//合并的結果的String值
correctArray(result, currentBit);//矯正result值
}
}
StringBuilder sb = new StringBuilder();
for(int m = resultBitTotal - 1; m >= 0; m--){
sb.append(result[m]);
}
int prezeronum = resultDotPos - sb.length();
for(int xx = 0; xx < prezeronum; xx++){//插入字首0
sb.insert(0, "0");
}
if(resultDotPos != 0){
sb.insert(sb.length() - resultDotPos, ".");//插入小數點
}
return new BigDecimal(sb.toString()).stripTrailingZeros();
}
public BigDecimal stripTrailingZeros() {
while((src.contains(".") && src.endsWith("0")) || src.endsWith(".")){//去除小數的字尾0,字尾.
src = src.substring(0, src.length() - 1);
}
while(src.startsWith("0") && !src.equals("0")){//去除字首0
src = src.substring(1, src.length());
}
return this;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String d = sc.next();
int z = sc.nextInt();
BigDecimal bd = new BigDecimal(d);
BigDecimal re = new BigDecimal("1");
for(int i = 0; i < z; i++){
re = re.multiply(bd);
}
String result = re.stripTrailingZeros().toString();
if(result.startsWith("0.")){
result = result.substring(1);
}
System.out.println(result);
}
}
}