POJ 1001 大数

来源:互联网 发布:淘宝返利的网站有哪些 编辑:程序博客网 时间:2024/05/01 21:35

无聊水一道。。大数模拟

各种坑爹测试数据

#include "stdio.h"#include "string.h"int a[10010],b[10010],c[10010];int main(){    int w,i,j,m,dian,k,le;    char str[1001];    while (scanf("%s%d",&str,&w)!=EOF)    {        getchar();        if (w==0)        {            printf("1\n");            continue;        }        memset(a,0,sizeof(a));        memset(b,0,sizeof(b));        memset(c,0,sizeof(c));        le=strlen(str);        m=1;        dian=-1;        for (i=le-1;i>=0;i--)        {            if (str[i]=='.') dian=m-1;            else            {                a[m]=str[i]-'0';                m++;            }        }        a[0]=m-1;        while (a[a[0]]==0) {a[0]--; if (a[0]==0) break;}        if (a[0]==0)        {            printf("0\n");            continue;        }        for (i=0;i<=a[0];i++)        b[i]=a[i];        for (i=2;i<=w;i++)        {            memset(c,0,sizeof(c));            for (j=1;j<=a[0];j++)                for (k=1;k<=b[0];k++)                c[j+k-1]+=a[j]*b[k];            c[0]=a[0]+b[0]-1;            for (j=1;j<=c[0];j++)            {                c[j+1]+=c[j]/10;                c[j]%=10;            }            if (c[c[0]+1]!=0) c[0]++;            while (c[c[0]]==0)            {                c[0]--;            }            for (j=0;j<=c[0];j++)                a[j]=c[j];        }        if (dian==-1)        {            for (i=a[0];i>=1;i--)            printf("%d",a[i]);            printf("\n");        }        else        {            dian*=w;            if (a[0]<=dian)            {                printf(".");                for (i=1;i<=dian-a[0];i++)                printf("0");                k=1;                while(a[k]==0) k++;                for (i=a[0];i>=k;i--)                    printf("%d",a[i]);                printf("\n");            }            else            {                for (i=a[0];i>dian;i--)                    printf("%d",a[i]);                k=1;                while(a[k]==0) k++;                if (dian>=k) printf(".");                for (i=dian;i>=k;i--)                    printf("%d",a[i]);                printf("\n");            }        }    }    return 0;}


0 0
原创粉丝点击