这道题用Java的BigDecimal要好做一些,算次方的时候用二分法优化一下应该就不会有超时发生了。
注意输出格式的设置,不能用科学计数法输出,还要去掉前后的零,去掉后面的零用BigDecimal的成员函数stripTrailingZeros(),
然后调用String类的toPlainString()函数得到不用科学计数法的字符串,最后自己写个循环去掉前面的零就行了。
import java.math.BigDecimal;
import java.util.Scanner;
public class Main
{
public static BigDecimal func(BigDecimal num, int n)
{
if(n == 1)
return num;
if(n%2 == 0)
return func(num,n/2).multiply(func(num,n/2));
else
return func(num,n/2).multiply(func(num,n/2)).multiply(num);
}
public static void main(String[] args)
{
Scanner scanner = new Scanner(System.in);
Scanner str_scan;
String s = "";
String temp;
BigDecimal num;
int n;
while(scanner.hasNextLine())
{
s = scanner.nextLine();
str_scan = new Scanner(s);
temp = str_scan.next();
num = new BigDecimal(temp);
n = str_scan.nextInt();
/*
System.out.println("num1="+num1);
System.out.println("num2="+num2);
*/
s = func(num,n).stripTrailingZeros().toPlainString();
if(s.charAt(0) == '0')
{
int i;
for(i=0; i<s.length(); i++)
if(s.charAt(i) != '0')
break;
System.out.println(s.substring(i));
}
else
{
System.out.println(s);
}
}
}
}