POJ 1001

高精度 小数

位数是确定的  所以很好写

注意特判0

和小数点的取舍

//By SiriusRen
#include <cstdio>
using namespace std;
char rd[105];
int n,b[1050],c[1050],d[1050],cnt,pnt,len,bgn,rem;
void pw(){
    for(int i=1;i<=len;i++)
        for(int j=1;j<=cnt;j++)
            d[i+j-1]+=c[i]*b[j];
    len=len+cnt;
    for(int i=1;i<=len;i++)d[i+1]+=d[i]/10,d[i]%=10,c[i]=d[i],d[i]=0;
}
int main(){
    while(~scanf("%s%d",rd,&n)){
        for(int i=0;i<6;i++){
            if(rd[i]=='.')pnt=i;
            else b[5-cnt]=rd[i]-'0',c[5-cnt]=b[5-cnt],cnt++;
        }len=cnt;
        for(int i=1;i<n;i++)pw();
        pnt=(5-pnt)*n,bgn=pnt,rem=pnt+1;
        for(int i=len;i>=pnt;i--)if(c[i]!=0){bgn=i;break;}
        for(int i=1;i<=pnt+1;i++)if(c[i]!=0){rem=i;break;}
        if(bgn<rem){puts("0");continue;}
        for(int i=bgn;i>=rem;i--){if(rem!=pnt+1&&i==pnt)putchar('.');printf("%d",c[i]);}
        cnt=0,puts(""); 
    }
}

 

posted @ 2018-06-11 09:57  SiriusRen  阅读(174)  评论(0编辑  收藏  举报