Exponentiation
Time Limit: 500MS Memory Limit: 10000K
Total Submissions: 64208 Accepted: 15055
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
經常會有變态的題目用到高精度,而實際上高精度也确實是惡心。。寫起來容易出錯不說編碼複雜度也是超大。
但是java就不一樣了。自帶的大數處理BigDecimal真是友善。不過java的string類處理實在是太麻煩了。
全部都需要函數來幹。比如切割啦String.substring(int,int)開始和結尾。String.lastIndexOf("")查找字元串。
然後定位。不過比c++還是簡單了許多。
A_C code
import java.math.BigDecimal;
import java.io.*;
import java.text.DecimalFormat;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
String a=cin.next();
int b=cin.nextInt();
BigDecimal f=new BigDecimal(a);
BigDecimal g=new BigDecimal("1");
for(int i=1;i<=b;i++)
{
g=g.multiply(f);
}
BigDecimal y=new BigDecimal(0);
if( g.compareTo(y)==0)
System.out.println("0");//等于0時
else{
String result;
result=g.toPlainString();
int pos;
int is=1;
pos=result.lastIndexOf(".");
for(int i=pos-1;i>=0;i--)//前導零的處理
{
if(result.charAt(i)!='0')
is=0;
}
if(is==1)//需要切割
{
result= result.substring(pos, result.length());
// System.out.println(result);
}
is=-1;
pos=result.lastIndexOf(".");
if(result.charAt(result.length()-1)=='0')
for(int i=result.length()-1;i>pos;i--)
{
if(result.charAt(i)=='0')
{
is=i;
}
else break;
}
if(is!=-1)
if(is!=pos+1)
result=result.substring(0, is);
else result=result.substring(0,is-1);
System.out.println(result);
}
// String result=g.toPlainString();
}
}
}