Sample Input
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int main()
{
char a[8];
int n;
int ans[200],temp[8];
int pos; //小数点之前的位数
while(scanf("%s %d",a,&n)!=EOF)
{
pos=-1;
memset(ans,0,sizeof(ans));
int len=strlen(a);
reverse(a,a+len);
int k=0;
for(int i=0;i<len;i++){
if(a[i]=='.')
pos=i;
else
{
ans[k]=a[i]-'0';
temp[k]=ans[k];
k++;
}
}
if(pos!=-1){
pos=pos*n;
len=len-1;
}
n=n-1;
int rlen=len;
int temptoo[200];
while(n--)
{
memset(temptoo,0,sizeof(temptoo));
for(int i=0;i<rlen;i++){
for(int j=0;j<len;j++){
temptoo[i+j]+=ans[j]*temp[i];
if(temptoo[i+j]>=10)
temptoo[i+j+1]+=temptoo[i+j]/10;
temptoo[i+j]=temptoo[i+j]%10;
}
}
len+=5;
memset(ans,0,sizeof(ans));
for(int i=0;i<len;i++){
ans[i]=temptoo[i];
}
}
int diweiling=-1;
int gaoweiling=1;
for(int i=0;i<pos;i++){
if(ans[i]==0){
diweiling=i;
}
else
break;
}
for(int i=len;i>=0;i--){
if(gaoweiling&&ans[i]==0&&i>(pos-1)){
continue;
}
if(pos==-1){
printf("%d",ans[i]);
gaoweiling=0;
continue;
}
if(i+1==pos&&diweiling<i)
printf(".");
if((i<=(pos-1)&&(i>diweiling))||(i>pos-1)){
printf("%d",ans[i]);
gaoweiling=0;
}
}
puts("");
}
return 0;
}