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

 

 

追求效率?开发时间

追求性能?运行时间、消耗内存

 

posted @ 2017-10-01 11:28  kimsimple  阅读(380)  评论(0编辑  收藏  举报