poj1001

来源:互联网 发布:手机怎么安装java微信 编辑:程序博客网 时间:2024/05/01 23:42
//============================================================================// 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;}

原创粉丝点击