#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20000
int main()
{
int n, p, i, j, k, x, carrey;
int num[MAX], num1[MAX], num2[MAX];
char R[7];
while( scanf( "%s %d", R, &n ) == 2 )
{
memset( num1, 0, sizeof(num1) );
memset( num2, 0, sizeof(num2) );
for( i = 0, j = 4; i < 6; i++ )
{
if( R[i] == '.' )
{
p = 5-i;
p *= n; //小数点的位置都与各个积的小数点之和
}
else
num1[j--] = R[i]-'0';
}
for(int i = 0; i < 5; i++ )
num2[i] = num1[i];
/*************计算部分****************/
for(int x = 1; x < n; x++ )
{
memset( num, 0, sizeof(num) );
for(int i = 0; i < 5; i++ ) //why 6 ? not 5?
{
carrey = 0;
for(int j = 0; j < MAX; j++ )
{
num[i+j] += num1[i] * num2[j] + carrey;
carrey = num[i+j] / 10;
num[i+j] %= 10;
}
}
for(int i = 0; i < MAX; i++ )
num2[i] = num[i];
}
/*************计算部分****************/
/****去掉开头和结尾的0*****/
for(i = MAX-1; i >= 0; i--) //42312 . 021 => 12021324000000
if( num[i] || i == p ) //找到开头 0.1234 => .1234
break;
for(j = 0; j <= i; j++) //找到结尾
if( num[j] )
break; // 0.1234 时,开头是.
/****去掉开头和结尾的0*****/
for( k = i; k >= j; k--)
{
if( p == k && k == i ) //如果小数点在最开始 如: 0.123 或者 1.23
{
if( num[k] ) //1.23 打印成 1.23
printf( "%d.", num[k] );
else //0.123 打印成 .123
printf( "." );
continue;
}
printf( "%d", num[k] );
if( p == k && k != i) // 普通情况 123.32 23214.010123
printf(".");
}
printf("\n");
}
return 0;
}