坑 不读说。。。上代码。。。。poj的discus上有测试。。。。慢慢测就是了。。。
AC代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int num[10000];
char R[20];
int N, point, A;
void init(){
int last = strlen( R );
while( last > 0 ){
if( R[last-1] == '0' ){
last--;
}else{
break;
}
}
memset( num, 0, sizeof( num ) );
A = 0;
int i;
for( i = 0; i < last && R[i] != '.' ; i++ ){
A = A * 10 + R[i] - '0';
}
point = 0;
if( i < last ){
i++;
while( i < last ){
A = A * 10 + R[i++] - '0';
point++;
}
}
int temp = A;
num[0] = 0;
while( temp ){
num[0]++;
num[num[0]] = temp % 10;
temp /= 10;
}
}
void calc(){
for( int i = 2; i <= N; i++ ){
int mod = 0;
for( int i = 1; i <= num[0]; i++ ){
mod = mod + num[i] * A;
num[i] = mod % 10;
mod /= 10;
}
while( mod ){
num[++num[0]] = mod % 10;
mod /= 10;
}
}
}
void out(){
if( num[0] <= point * N ){
cout << '.';
for( int i = point * N; i > num[0]; i-- ){
cout << 0;
}
for( int i = num[0]; i >= 1; i-- ){
cout << num[i];
}
cout << endl;
}else{
for( int i = num[0]; i > point * N; i-- ){
cout << num[i];
}
if( point != 0 ){
cout << '.';
for( int i = point * N; i >= 1; i-- ){
cout << num[i];
}
}
cout << endl;
}
}
int main(){
while( scanf( "%s%d", R, &N ) != EOF ){
if( N == 0 ){
cout << 1 << endl;
continue;
}
init();
if( A == 0 ){
cout << 0 << endl;
break;
}
calc();
out();
}
return 0;
}