POJ 1001 求高精度幂

高精度问题  初学的时候觉得很恶心。

去掉小数点,原数组存在另一个数组,将小数点标记。

用中间数组进行存储,模仿笔算乘法

去掉前导0 后导0 用up down 




#include 
#include 
#include 

using namespace std;
#define MAX 26*5
char str[6];
int  res[MAX],a[MAX],b[MAX];
int n,dot;
int lena,lenb;

void mul()
{
    memset(res,0,sizeof(res));
    for(int i=1; i<=lena; i++)
        for(int j=1; j<=lenb; j++)
        {
            res[i+j-1] +=a[i]*b[j];
            if(res[i+j-1]>9)
            {
                res[i+j]   += res[i+j-1]/10;
                res[i+j-1] %=10;
            }
        }

    lena=lena+lenb;
    for(int i=1; i<=lena; i++)
        a[i]=res[i];
}

int main()
{
    //freopen("in.txt","r",stdin);
    int down,up;
    while(scanf("%s %d",str,&n)!=EOF)
    {
        dot=-1;
        for(int i=5,j=1; i>=0; i--)
        {
            if(str[i]!='.')
            {
                a[j]=b[j]=str[i]-'0';
                j++;
            }
            else
                dot=i;
        }
        if(dot==-1)  lena=lenb=6;
        else         lena=lenb=5;
        for(int i=1; i0; i--)
                printf("%d",a[i]);
            printf("\n");
        }
        else
        {
            dot  =5-dot;
            dot *=n;
            for(int i=1; i<=lena; i++)
                if(a[i]!=0)
                {
                    down=i;
                    break;
                }
            for(int j=lena; j>0; j--)
            {
                if(a[j]!=0)
                {
                    up=j;
                    break;
                }
            }
            int i=up;
            if(updot)
                j=dot+1;
            for(; i>=j; i--)
            {
                if(i==dot)
                    printf(".");
                printf("%d",a[i]);
            }
        }
        printf("\n");
    }
    return 0;
}


 
  

你可能感兴趣的:(ACM初)