HDOJ 1063 Exponentiation 简单解题报告

    额,不是很喜欢这道题。。。失败了好几次,因为考虑的不详细。高进度乘法倒是没什么,吧前面的0和后面的0处理好即可。

    下面是笔者的AC代码,比较难看,见谅。笔者自己也不想改了。。。==||。附带网上找到的测试数据。

#include <iostream>

using namespace std;



const int MAX_LEN=1000;

int temp[1000];



void mul(char* z,char* x,char* y)

{

    int lenx=strlen(x);

    int leny=strlen(y);

    int i,j;

    memset(temp,0,1000*4);

    for(i=0;i<lenx;i++)

        for(j=0;j<leny;j++)

            temp[i+j]+=(x[lenx-1-i]-'0')*(y[leny-1-j]-'0');

    memset(z,0,1000);

    for(i=0;(i<lenx+leny-1) || temp[i]>9;i++)

    {

        if(temp[i]>9)

            temp[i+1]+=temp[i]/10;

        z[i]=temp[i]%10+'0';

    }

    z[i]=temp[i]+'0';

    z[i+1]=0;

    while(z[i]=='0' && i)

        z[i--]=0;

    _strrev(z);

}



int main()

{

    char t[1000];

    char s[7];

    int i,n,dot,len,integer;

    while(cin>>s>>n)

    {

        dot=-1;

        integer=0;

        for(i=0;i<6;i++)

            if(s[i]=='.')

            {

                dot=i;

                for(;i<6;i++)

                {

                    s[i]=s[i+1];

                    if(s[i]==0)

                        break;

                }

                while(s[--i]=='0' && i>=dot)

                    s[i]=0;

                dot=strlen(s)-dot;

                if(dot==0)

                    integer=1;

                break;

            }

        if(dot==-1)

            integer=1;

        memset(t,0,1000);

        t[0]='1';

        for(i=0;i<n;i++)

            mul(t,t,s);

        len=int(strlen(t))-dot*n;

        if(integer)

            cout<<t<<endl;

        else if(len>0)

        {

            for(i=0;i<len;i++)

                cout<<t[i];

            cout<<'.'<<t+len<<endl;

        }

        else

        {

            cout<<'.';

            for(i=0;i<-len;i++)

                cout<<'0';

            cout<<t<<endl;

        }

    }

}

 95.123 12
 0.4321 20
 5.1234 15
 6.7592  9
 98.999 10
 1.0100 12
 .00001  1
 .12345  1
 0001.1  1
 1.1000  1
 10.000  1
 000.10  1
 000010  1
 000.10  1
 0000.1  1
 00.111  1
 0.0001  1
 0.0001  3
 0.0010  1
 0.0010  3
 0.0100  1
 0.0100  3
 0.1000  1
 0.1000  3
 1.0000  1
 1.0000  3
 1.0001  1
 1.0001  3
 1.0010  1
 1.0010  3
 1.0100  1
 1.0100  3
 1.1000  1
 1.1000  3
 10.000  1
 10.000  3
 10.001  1
 10.001  3
 10.010  1
 10.010  3
 10.100  1
 10.100  3
 99.000  1
 99.000  3
 99.001  1
 99.001  3
 99.010  1
 99.010  3
 99.100  1
 99.100  3
 99.998  1
 99.998  3

你可能感兴趣的:(exp)