51nod 1873 高精度计算
JAVA BigDecimal
import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); String str = cin.next(); int n = cin.nextInt(); BigDecimal res = new BigDecimal(1); final BigDecimal bd = new BigDecimal(str); for(int i = 0; i < n; ++i){ res = res.multiply(bd); } str = res.stripTrailingZeros().toPlainString(); System.out.println(str.startsWith("0.") ? str.substring(1) : str); } }
C++
#include<bits/stdc++.h> using namespace std; string multi(string a,string b) { int i,j,arr[200],len=a.length()+b.length(); memset(arr,0,sizeof(arr)); reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); for(i=0;i<a.length();i++) { for(j=0;j<b.length();j++) { arr[i+j]+=(a[i]-'0')*(b[j]-'0'); } } for(i=0;i<len;i++) { arr[i+1]+=arr[i]/10; arr[i]%=10; } string ret=string(len,'0'); for(i=0;i<len;i++) ret[i]+=arr[i]; reverse(ret.begin(),ret.end()); return ret; } string strpow(string x,int p) { string ret="1"; while(p) { if(p&1) ret=multi(ret,x); x=multi(x,x); p>>=1; } return ret; } int main() { string a; int n,i,index; while(cin>>a>>n) { index=a.find('.'); if(index==-1) index=0; else { a=a.substr(0,index)+a.substr(index+1); index=(a.length()-index)*n; } a=strpow(a,n); a=a.substr(0,a.length()-index)+"."+a.substr(a.length()-index); for(i=0;i<a.length();i++) { if(a[i]!='0') break; } a=a.substr(i); for(i=a.length()-1;i>=0;i--) { if(a[i]=='.') { a=a.substr(0,i); break; } else if(a[i]!='0') { a=a.substr(0,i+1); break; } } cout<<a<<endl; } }
追求效率?开发时间
追求性能?运行时间、消耗内存