/*
* 解题思路:
* 题意不难理解、解题大概思想就是
* 第一步:记录小数点位置(即记录有多少位小数);
* 第二步:将小数点去掉、利用先前10106乘积那道题代码,连续成n次该数据
* 第三步:将小数点补回数据中去
* p s: 题目有特殊说明前导0后缀0的问题,我在第一步前先将原输入数据去掉了前导0和后缀0!!
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define A 500
char s[ 10 ],str[ A ];
char out[ A ];
int p;
int search( int len )
{
int i;
for(i=0;i<len;i++ )
if( s[ i ] == '.' ) return i;
return -1;
}
int delZeroPostFix( int pos , int len )
{
int i;
int total = 0,flag = 0;
for( i=len-1;i>pos;i-- )
if( !flag && s[ i ] == '0' ) total++;
else break;
return len-total;
}
void delZeroPreFix( int len )
{
int i;
int flag = 0,sum = 0;
for( i=0;i<len;i++ )
if( !flag && s[ i ] == '0' ) sum++;
else break;
for(i=0;i<len-sum;i++ )
s[ i ] = s[ i+sum ];
s[ len-sum ] = '\0';
}
void delPoint( int pos ,int len )
{
int i;
for( i=pos;i<len-1;i++ )
s[ i ] = s[ i+1 ];
}
void Mutiply( char s1[] ,char s2[] , int len1 ,int len2 )
{
int x,y,z,zz=0;
int i,j,k;
int tmp,flag;
int len,in;
char ss[ A ],stmp[ A ];
if( len1 > len2 )
{
strcpy( stmp , s1 );
strcpy( s1,s2 );
strcpy( s2 , stmp );
tmp = len1;
len1 = len2;
len2 = tmp;
}
memset( ss , '0' , sizeof( ss ) );
for( i=len2-1;i>=0;i-- )
{
in = 0;
memset( stmp , '0', sizeof( stmp ) );
for( j=len1-1;j>=0;j-- )
{
x = s1[ j ] - '0';
y = s2[ i ] - '0';
if( ( x*y+in) >= 10 )
{
stmp[ i+j ] = ( char )(( (x*y+in)%10 )+'0');
in = (x*y+in)/10;
}
else if( (x*y+in )<=9 && (x*y+in ) >=0 )
{
stmp[ i+j ] =(char) (x*y+in +'0');
in = 0;
}
}
if( in != 0 && i!=0 )
stmp[ i-1 ] = in+'0';
flag = 0;
for( j=i+len2-1;j>=0;j-- )
{
if( ss[ j ]-'0' + stmp[ j ] -'0' + flag >=10 )
{
ss[ j ] = (ss[ j ]-'0' + stmp[ j ] - '0' + flag )%10+'0';
flag = 1;
}
else
{
ss[ j ] += stmp[ j ] -'0'+ flag;
flag = 0;
}
}
if( i == 0 && in+flag )
{
zz = 0;
memset( stmp ,'\0', sizeof( stmp ) );
z = in + flag;
while( z!=0 )
{
stmp[ zz++ ] = z%10+'0';
z/=10;
}
ss[ len1+len2-1+zz ] = '\0';
len = strlen( ss );
for( k=len+zz;k>=zz;k-- )
ss[ k ] = ss[ k-zz ];
for( k=0;k<zz;k++ )
ss[ zz-k-1 ] = stmp[ k ];
}
}
ss[ len1+len2-1+zz ] = '\0';
strcpy( str , ss );
}
void addPoint( int sum , int n)
{
int i;
int x = sum*n,y;
int len = strlen( str );
for( i=len-1,y=0;i>=0;i-- ,y++)
{
if( y == x ) out[ p++ ] = '.';
out[ p++ ] = str[ i ];
}
if( y<x )
{
for( ;y<x;y++ )
out[ p ++ ] = '0';
out[ p++] = '.';
}
}
void Paint( )
{
int i;
for( i = p-1;i>=0;i-- )
printf("%c",out[ i ] );
puts("");
}
int main( )
{
int n;
int pos,sum,len,y,tmp;
int len1,len2;
while( ~scanf("%s%d",s,&n ) )
{
len = strlen( s );
pos = search( len );
sum = len-pos-1;
len = delZeroPostFix( pos , len );
s[ len ] = '\0';
delZeroPreFix( len );
len = strlen( s );
pos = search( len );
sum = len-pos-1;
delPoint( pos , len );
s[ len-1 ] = '\0';
strcpy( str , s);
len1 = strlen( s );
tmp = n;
tmp--;
while( tmp-- )
{
len2 = strlen( str );
Mutiply( s , str , len1 , len2 );
}
p = 0;
addPoint( sum , n );
Paint( );
}
return 0;
}