//============================================================================
// Name : 1001.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <sstream>
using namespace std;
void integerToString(int i, string& str) {
std::string s;
std::stringstream out;
out << i;
str = out.str();
string zero("0");
while (str.length() < 6) {
str = zero+ str;
}
}
class Exponentiation {
private:
int n;
string s;
int integer;
long long* result;
int use;
int tail;
public:
Exponentiation(string& s, int n) {
result = NULL;
this->s = s;
this->n = n;
int index = s.find_first_of('.');
string str = s.substr(0, index) + s.substr(index + 1, s.length());
stringstream ss(str);
ss >> integer;
tail = n * (5 - index);
}
~Exponentiation() {
if (result != NULL) {
delete[] result;
}
}
void calculate() {
result = new long long[n + 1];
result[0] = 1;
use = 1;
for (int i = 0; i < n; i++) {
int mod = 0;
for (int j = 0; j < use; j++) {
result[j] = result[j] * integer + mod;
mod = result[j] / 1000000;
result[j] %= 1000000;
}
if (mod > 0) {
result[use++] = mod;
}
}
}
void print() {
string re;
string out;
string zero("0");
for (int i = use - 1; i >= 0; i--){
integerToString(result[i],out);
re += out;
}
while (re.length() < tail + 1) {
re = zero + re;
}
re = re.substr(0, re.length() - tail) + "."
+ re.substr(re.length() - tail, re.length());
int last = re.find_last_not_of('0');
if (last != re.length()-1){
re = re.substr(0,last+1);
}
int first = re.find_first_not_of('0');
if (first>0){
re = re.substr(first,re.length()-1);
}
if (re.at(re.length()-1)=='.'){
re = re.substr(0,re.length()-1);
}
cout << re << endl;
}
};
int main() {
string s;
int n;
while (cin >> s >> n) {
Exponentiation exp(s, n);
exp.calculate();
exp.print();
}
return 0;
}
poj1001
最新推荐文章于 2019-12-01 23:05:10 发布