高精度浮点数幂无异于高精度乘法,只是多了浮点运算。处理方法是先去掉小数点,最后输出时再加上去。
但是不能忘了对小数点的特殊处理,例如:
输入: 10.000 1
输出: 10
如果不注意有可能输出为10. //<-注意这个多余的小数点。
贴代码吧~详见注释~
1 #include <iostream> 2 #include <cstring> 3 4 using namespace std; 5 6 int main() { 7 string r; 8 int n; 9 while (cin>>r>>n) { 10 int i=1,p; 11 for (;i<6;i++) 12 if (r[i]=='.') 13 p=i;//找出小数点所在 14 r.erase(p,1);//先去掉小数点 15 string ans; 16 ans.resize(1024,0); 17 for (i=0;i<5;i++) 18 ans[i]=r[4-i]-48;//数字倒排 19 r=ans; 20 int l=5; 21 for (i=1;i<n;i++) { 22 string tmp; 23 tmp=ans; 24 ans=""; 25 ans.resize(1024,0); 26 for (int j=0;j<5;j++,l++) { 27 for (int k=0;k<l;k++) 28 ans[k+j]+=r[j]*tmp[k]; 29 for (int k=0;k<l;k++) 30 if (ans[k]>=10) { 31 if (k==l-1) 32 l++; 33 ans[k+1]+=ans[k]/10; 34 ans[k]%=10; 35 } 36 }//逐位相乘 注意进位 37 } 38 ans.insert(n*(5-p),1,'.');//插入小数点 39 int k=l; 40 while (0==ans[k]) --k; 41 int j=0; 42 while (0==ans[j]) ++j;//去掉首尾多余的零 43 if ('.'==ans[j]) ++j;//去掉多余的小数点 44 for (;k>=j;k--)ans[k]=='.'?cout<<'.':cout<<ans[k]-0;//最后正序输出 45 cout<<endl; 46 } 47 return 0; 48 }