bigdecimal

import java.math.BigDecimal;
import java.util.Scanner;
public class Main {    
    public static void main(String args[]) {
        Scanner cin = new Scanner(System.in);
        String base = null;
        String radix = null;
        while(cin.hasNext()) {
            base = cin.next();
            radix = cin.next();
            StringBuffer baseBuffer = new StringBuffer();
            boolean flag = false;
            BigDecimal baseInt = null;
            BigDecimal divider = null;
            int index = base.indexOf('.');
            int radixInt = Integer.valueOf(radix);
            if(index >= 0 && index < 5) {
                flag = true;
                divider = new BigDecimal("10");
                divider = divider.pow((5 - index) * radixInt);
            }
            int begin = 0;
            while(base.charAt(begin) == '0' || base.charAt(begin) == '.')begin++;
            for(int i = begin; i < base.length(); i++) {
                char c = base.charAt(i);
                if( c == '.') {
                    continue;
                } else {
                    baseBuffer.append(c);
                }
            }
            baseInt = new BigDecimal(baseBuffer.toString());
            baseInt = baseInt.pow(radixInt);
            if(flag) baseInt = baseInt.divide(divider);
            String result = baseInt.toPlainString();
            if(result.charAt(0)== '0'){
                result = result.substring(1);
            }
            System.out.println(result);
        }
    }

}



【C++版】

#include<iostream>
#include<string>
using namespace std;
#define N1 150
#define N2 300
int a1[N2],b1[N2],c1[N2+1];
void chtoint(string ch,int a[])
{
    int i,j,t,dot;
    for(i=2;i<N2;i++)a[i]=0;
    a[1]=1;j=1;dot=0;
    for(i=0;i<ch.length();i++)
    {
        if(ch[i]>='0'&&ch[i]<='9'){j=j+1;a[j]=ch[i]-'0';}
        else if(ch[i]=='.')dot=j;
        else if(ch[i]=='-')a[1]=-1;
    }
    if(dot==0)dot=j;
    t=1;
    do{t=t+1;}while(a[t]==0);
    a[0]=dot-t+1;
    if(t>2)
    {
        for(i=2;i<=j-t+2;i++)a[i]=a[i+t-2];
        for(i=j-t+3;i<=j;i++)a[i]=0;
    }   
}
void frmt(int f[])
{
    int j,fj,fj1;
    for(j=N2;j>2;j--)
    {
        fj=f[j];
        if(fj>9){
            fj1=fj/10;
            f[j-1]=f[j-1]+fj1;
            f[j]=f[j]-(fj1*10);
        }
    }
    //for(j=2;j<=N2;j++)cout<<f[j];            
}
void multy(int d[],int e[],int f[])
{
    int k,j,dj;
    for(j=2;j<=N2;j++)f[j]=0;
    for(j=2;j<=N1;j++){
        dj=d[j];
        if(dj>0){
            for(k=j+1;k<=N1+j;k++)f[k]=f[k]+dj*e[k-j+1];
            if(j%50==0)frmt(f);
        }
        frmt(f);f[1]=d[1]*e[1];f[0]=d[0]+e[0];
    }        
}
void print(int c[])
{
    int i,j,t;
    if(c[1]==-1)cout<<'-';
    t=N2+1;
    do{t=t-1;}while(c[t]==0);
    if(c[0]>0){
        j=2;
        while(c[j]==0)j=j+1;
        for(i=j;i<c[0]+2;i++)cout<<c[i];
        if(i<=t){
            cout<<'.';
            for(i=c[0]+2;i<=t;i++)cout<<c[i];
        }    
    }
    else{
        cout<<".";
        if(c[0]<0)
        for(i=2;i<0-c[0]+2;i++)cout<<'0';
        for(i=0-c[0]+2;i<=t;i++)cout<<c[i];
    }        
}                
int main()
{
    string s;
    int n,i,j;
    while(cin>>s>>n)
    {
        chtoint(s,a1);chtoint(s,b1);
        //multy(a1,b1,c1);
        //print(c1);
        //print(a1);cout<<endl;
        //for(i=0;i<=N1;i++)cout<<a1[i];
        if(n==1){print(a1);cout<<endl;}
        else{
            for(i=1;i<n;i++)
            {
                multy(a1,b1,c1);
                //for(j=2;j<=N2;j++)cout<<c1[i];
                for(j=0;j<=N1;j++)b1[j]=c1[j];
            }
            print(c1);
            cout<<endl;
        }                           
    }
    return 0;
}        


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值