高精度 小数
位数是确定的 所以很好写
注意特判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(""); } }