hdu1063

Posted 王坤1993

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1063相关的知识,希望对你有一定的参考价值。

#include<iostream>  
#include<string>  
using namespace std;  
  
struct BigReal        //高精度实数  
{  
    int len;           //长度  
    int num[10000];  
    int point;         //小数点位置  
    BigReal()  
    {  
        len=1;  
        point=0;  
        memset(num,0,sizeof(num));  
    }  
};  
  
bool Read(BigReal& a)    //读入一个大实数  
{  
    string s;  
    int t,i;  
  
    if(cin>>s)  
    {  
        a.len=s.size();  
        a.point=0;  
        t=0;  
        for(i=s.size()-1;i>=0;i--)  
        {  
            if(s[i]==‘.‘)  
            {  
                a.len--;  
                a.point=t;  
                continue;  
            }  
            a.num[t++]=s[i]-‘0‘;  
        }  
        return true;  
    }  
    else  
        return false;  
}  
  
void Show(BigReal& a)  
{  
    int i,pos;  
  
    for(i=0;i<a.point && a.num[i]==0;i++) ;  
    pos=i;  
    if(a.point==a.len)  
    {  
        if(pos==a.point)  
        {  
            cout<<0<<endl;          //0.0000000的情况  
            return ;  
        }  
        else  
            cout<<‘.‘;              //0.121313114的情况  
    }  
    for(i=a.len-1;i>=0;i--)  
    {  
        cout<<a.num[i];  
        if(i==pos) break;          //小数时后导零不输出  
        if(i==a.point) cout<<‘.‘;  
    }  
    cout<<endl;  
}  
  
BigReal Mul(const BigReal& a,const BigReal& b)  
{  
    int i,j,len=0;  
    BigReal c;  
  
    for(i=0;i<a.len;i++)  
        for(j=0;j<b.len;j++)  
        {  
            c.num[i+j]+=a.num[i]*b.num[j];  
            if(c.num[i+j]>=10)  
            {  
                c.num[i+j+1]+=c.num[i+j]/10;  
                c.num[i+j]%=10;  
            }  
        }  
    c.point=a.point+b.point;  
    len=a.len+b.len;  
    while(c.num[len-1]==0 && len>1&&len>c.point) len--;   //处理长度,去掉前导零  
    if(c.num[len]) len++;  
    c.len=len;  
    return c;  
}  
  
int main()        
{  
    BigReal a;  
    int b;  
  
    while(Read(a)&& scanf("%d",&b)==1)  
    {  
        BigReal ans;  
        ans.num[0]=1;  
        while(b--)  
            ans=Mul(ans,a);  
        Show(ans);  
    }  
    return 0;        
}  

以上是关于hdu1063的主要内容,如果未能解决你的问题,请参考以下文章

HDU Exponentiation 1063 Java大数题解

( 大数 startsWith substring) Exponentiation hdu1063

错误 #1063:参数计数不匹配 - AS3

关于fatal error C1063

codevs 1063 合并果子

1063 合并果子