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的值 "); 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 }