1. 程式人生 > >51nod 1873 高精度計算

51nod 1873 高精度計算

分享 bsp 技術分享 exti big ros public ++ lin

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; } }

技術分享

追求效率?開發時間

追求性能?運行時間、消耗內存

51nod 1873 高精度計算