不想说这道题多烦了!!!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define M 200
int findPointPos(char a[])
{
int alen=strlen(a);
for(int i=0;i<alen;i++)
if(a[i]=='.')
return i;
return -1;
}
void reverse(char a[])
{
int alen=strlen(a);
for(int i=0;i<alen/2;i++)
{
char temp=a[alen-1-i];
a[alen-1-i]=a[i];
a[i]=temp;
}
}
void multiply(char a[],char b[],char c[])
{
int alen,blen;
int q;
alen=strlen(a);
blen=strlen(b);
for(int i=0;i<alen;i++)
{
q=0;
for(int j=0;j<blen;j++)
{
int p=(b[j]-'0')*(a[i]-'0')+c[i+j]-'0'+q;
c[i+j]=p%10+'0';
q=p/10;
}
if(q!=0)
c[i+blen]=q+'0';
}
if(q==0)
c[alen+blen-1]='\0';
else
c[alen+blen]='\0';
}
int main()
{
char result[M],temp_result[M];
char a[10],temp[10];
int pointBit,n;
while(scanf("%s%d",a,&n)==2)
{
int i;
int alen=strlen(a);
pointBit=alen-findPointPos(a)-1;
int c=0;
for(i=0;i<alen;i++)
if(a[i]!='.')
temp[c++]=a[i];
temp[c]='\0';
int u=0;
while(u<c && temp[u]=='0')
u++;
for(i=u;i<c;i++)
a[i-u]=temp[i];
a[i-u]='\0';
reverse(a);
strcpy(result,a);
for(i=2;i<=n;i++)
{
strcpy(temp_result,result);
memset(result,'0',sizeof(result));
multiply(a,temp_result,result);
}
reverse(result);
pointBit*=n;
int rlen=strlen(result);
for(i=rlen-1;i>=0;i--)
{
if(result[i]!='0')
break;
else
result[i]='-';
}
if(rlen>pointBit)
{
for(i=0;i<rlen-pointBit;i++)
printf("%c",result[i]);
printf(".");
for(;i<rlen;i++)
if(result[i]=='-')
break;
else
printf("%c",result[i]);
}
else
{
printf(".");
for(i=0;i<pointBit-rlen;i++)
printf("0");
for(i=0;i<rlen;i++)
printf("%c",result[i]);
}
printf("\n");
}
return 0;
}