uva 748 Exponentiation

来源:互联网 发布:梯形螺纹加工编程实例 编辑:程序博客网 时间:2024/04/29 12:47

这道题用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));elsereturn 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);}}}}


 

原创粉丝点击