码迷,mamicode.com
首页 > 其他好文 > 详细

51nod 1873 高精度计算

时间:2017-10-01 12:13:25      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:its   substring   span   高精度计算   pre   分享   code   scanner   reverse   

 

 

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 高精度计算

标签:its   substring   span   高精度计算   pre   分享   code   scanner   reverse   

原文地址:http://www.cnblogs.com/kimsimple/p/7616911.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!