1 /*coder @Gxjun*/
2 #include<stdio.h>
3 #include<string.h>
4 #include<stdlib.h>
5 #define maxn 10000
6 char rx[16]; /*既然是实数,那么就精确到16位吧*/
7 int ans[maxn],nx[17],tem[maxn],cc[maxn];
8 int main( void )
9 {
10 int n,i,po=0,j,cnt,k;
11 printf("输入n x的值\n");
12 while(~scanf("%d%s",&n,rx))
13 {
14 int pos=strlen(rx)-1,low=0;
15 memset(nx,0,sizeof(nx));
16 po=cnt=0;
17 bool flag=false; //<判断是否为负数>
18 if(rx[0]=='-'||rx[0]=='+')
19 {
20 if(rx[0]=='-'&&(n&1))flag=true;
21 low++;
22 }
23 for(i=pos;i>=low;i--)
24 {
25 //小数转化为整数,并记录小数的个数...po;
26 if(rx[i]=='.') po=pos-i;
27 else nx[cnt++]=rx[i]-48;
28 }
29 memset(ans,0,sizeof(ans));
30 memset(tem,0,sizeof(tem));
31 pos=cnt;
32 int len=n*pos,s;
33 po*=n;
34 memcpy(ans,nx,pos*sizeof(nx[0]));
35 while(n-->1)
36 {
37 for(cnt=i=0;i<pos;i++)
38 {
39 for(s=j=0;j<len;j++)
40 {
41 tem[j]=(ans[j]*nx[i]+s);
42 s=tem[j]/10;
43 tem[j]%=10;
44 }
45 /*memcpy(cc,tem,len);*/
46 for(j=cnt,s=k=0 ;j<len;j++,k++)
47 {
48 cc[j]+=(tem[k]+s);
49 s=cc[j]/10;
50 cc[j]%=10;
51 }
52 cnt++;
53 memset(tem,0,sizeof(tem));
54 }
55 memcpy(ans,cc,len*sizeof(cc[0]));
56 memset(cc,0,sizeof(cc));
57 }
58 i=len;
59 while(ans[i]==0&&i>po)i--;
60 if(flag)printf("-");
61 while(i>=0)
62 {
63 printf("%d",ans[i]);
64 if(i==po&&i!=0)printf(".");
65 i--;
66 }
67 putchar(10);
68 }
69 return 0;
70 }