赤裸裸的大数,这题比较水了,一些边界没有让你考虑
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXD 1000
using namespace std;
int Len;
int solve(int x[],int y[]){
int z[MAXD] = {0};
for(int i = 0 ; i < MAXD/2 ; i++)
for(int j = 0 ; j < Len ;j++){
z[i + j] += x[i] * y[j];
}
for(int i = 0 ; i < MAXD - 10; i++){
z[i + 1] += z[i] / 10;
z[i] = z[i] % 10;
}
memcpy(x,z,sizeof(z));
}
int main(){
char R[MAXD];
int n;
while(scanf("%s%d",R,&n) != EOF){
int L = strlen(R);
int Number[MAXD] = {0};
int Num[MAXD] = {0};
Len = 0;
int pos = L;
int POS ;
for(int i = L - 1; i >=0 ; i--){
if(R[i] != '.')
Number[Len++] = R[i] -'0';
else
pos = i;
}
POS = Len - pos;
pos = POS * n;
memcpy(Num,Number,sizeof(Num));
for(int i = 0; i < n - 1;i ++){
solve(Number,Num);
}
int i,j;
for(i = MAXD - 10; i >= pos; i--)
if(Number[i] != 0) break;
for(j = 0 ; j < pos ; j++)
if(Number[j] != 0) break;
for(; i >= j ; i --){
if(i + 1== pos) printf(".");
printf("%d",Number[i]);
}
printf("\n");
}
return 0;
}