-
输入:浮点数和幂指数
输入的浮点数带上小数点固定6位 -
输出:幂运算结果
输出的0.xx输出.xx 小数点后没有多余的0 -
思路:先确定小数点的位置,后使用数组的方式按照列竖式的方法计算
-
参考:https://www.cnblogs.com/lsdsjy/archive/2012/11/03/2752948.html
#include<iostream>
#include<string>
using namespace std;
int main(){
string num_float;
int n;
while(cin >> num_float >> n){
//find .
int point_pos;
for(int i = 1;i<6;i++){
if(num_float[i] == '.'){
point_pos = i;
break;
}
}
num_float.erase(point_pos,1);//earse .
//reverse num
string ans;
ans.resize(5,0);
for(int i = 0;i<5;i++){
ans[i] = num_float[4-i] - '0';
}
num_float = ans;
int l = 5;
for(int i = 0; i < n-1;i++){
string tmp;
tmp.resize(1024,0);
tmp = ans;
ans = "";
ans.resize(1024,0);
for(int j = 0;j<5;j++){
for(int k = 0;k<l;k++){
ans[j+k] += num_float[j] * tmp[k];
if(ans[j+k] >= 10){
if(j+k == l+3)
continue;
ans[j+k+1] += ans[j+k] / 10;
ans[j+k] = ans[j+k] % 10;
}
}
}
while(ans[l+3] >= 10){
ans[l+4] += ans[l+3]/10;
ans[l+3] = ans[l+3]%10;
l++;
}
l += 4;
}
ans.insert(n*(5-point_pos), 1, '.');
//find start
int start = l;
while(ans[start] == 0) start--;
//find end
int end = 0;
while(ans[end] == 0) end ++;
if(ans[end] == '.') end++;
for(int i = start; i>= end;i--){
if(ans[i] != '.')
cout << ans[i] + 0;
else
cout << '.';
}
cout << endl;
}
return 0;
}