题意: 求一个实数R的n次幂 即ans = R ^ n;
方法: 模拟高精度乘法两个大数相乘,以字符串输入,用数组a[], b[]按位存储,最终结果用另外一个数组c[]存储核心代码:memset(c, 0, sizeof(c)); //初始化结果数组for(i = 0; i < l1; i++) for(j = 0; j < l2; j++) { c[i + j] += a[i] * b[j]; c[i + j + 1] += c[i + j] / 10; c[i + j] %= 10; }
#include#include int main(){ char d[150]={ 0}; int n; while(scanf("%s%d",d,&n)!=EOF) { int a[150]={ 0},b[150]={ 0},c[150]={ 0},temp,flag; int lend,lena,lenb,lenc,len,i,j,k,digit,s; lend=strlen(d)-1; //整个字符串长度 for(i=0;d[i];i++) if(d[i]=='.') break; digit=lend-i; //小数部分的长度 for(j=i;d[j];j++) d[j]=d[j+1]; //去掉小数点的字符串 lend=lend-1; //调整长度 for(i=0;i<=lend/2;i++) //字符串倒转 { temp=d[i]; d[i]=d[lend-i]; d[lend-i]=temp; } for(i=0;d[i];i++) a[i]=d[i]-48; //字符串转为数 lena=lend; for(i=0;i<=lena;i++) b[i]=a[i]; //浮点数复制一份 lenb=lena; for(i=1;i<=n-1;i++) //浮点数n次方 结果在c数组中 { for(j=0;j<=lenb;j++) //两重for将两数相乘 for(k=0;k<=lena;k++) { c[j+k]+=a[k]*b[j]; c[k+j+1]+=c[j+k]/10; c[j+k]%=10; } k--;j--; if(c[k+j+1]!=0) lenc=j+k+1; else lenc=j+k; for(j=0;j<=lenc;j++) b[j]=c[j]; lenb=lenc; memset(c,0,sizeof(c)); } digit=n*digit; //总的小数位数 len=lenb+1-digit; //以下将结果输出 flag=0; for(i=lenb-len;i>=0;i--) if(b[i]!=0) { flag=1; break; } if(flag==0) { for(i=lenb;i>=lenb-len+1;i--) printf("%d",b[i]); printf("\n"); continue; } if(len==1&&b[lenb]==0) printf("."); else { for(i=lenb;i>=lenb-len+1;i--) printf("%d",b[i]); printf("."); } for(i=0;i<=lenb-len;i++) if(b[i]!=0) { temp=i; break; } for(i=lenb-len;i>=temp;i--) printf("%d",b[i]); printf("\n"); } return 0;}