| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
所有数据都测试了 为什么还不行呢 代码在这里 c++的 好心人谁帮忙测试下#include <iostream>
#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <sstream>
#include <limits>
#include <string>
#include <cmath>
using namespace std;
string power(string &s, int n)
{
int h,l;
if (s.find('.') == string::npos) {
s += '.';
}
for (h = s.size() - 1; h >= 0 && s[h] == '0'; h--) {
}
for (l = 0; l <= s.size() - 1 && s[l] == '0'; l++) {
}
if (s[l] == '.') {
if (l == 0) {
string t = "0";
t += s.substr(0, h + 1);
s = t;
} else {
s = s.substr(l - 1, h + 1 - (l - 1));
}
} else {
s = s.substr(l, h + 1 - l);
}
int dot_size = (s.size() - s.find('.') - 1) * n; //结果中小数的位数
string tmp_result;
string result = s;
if (n == 1) {
if (result[0] == '0') {
result = result.substr(1, result.size() - 1);
}
if (dot_size == 0) {
result = result.substr(0, result.size() - 1);
}
return result;
}
for (; n > 1; n--) {
tmp_result = result;
string temporary = "";
int base = 0;
int up = 0;
for (string::const_reverse_iterator iter_t = tmp_result.rbegin(); iter_t != tmp_result.rend(); ++iter_t) {
if (*iter_t == '.') {
continue;
}
if (*iter_t == '0') {
base++;
continue;
}
string tmp = "";
for (int i = 0; i < base; i++) {
tmp += '0';
}
base++;
up = 0;
for (string::const_reverse_iterator iter_s = s.rbegin(); iter_s != s.rend(); ++iter_s) {
if (*iter_s != '.') {
int r = (*iter_t - '0') * (*iter_s - '0') + up;
if (r == 0) {
tmp += '0';
} else {
tmp += r % 10 + '0';
}
up = r / 10;
}
}
if (up != 0) {
tmp += '0' + up;
}
reverse(tmp.begin(), tmp.end());
int size;
int mutex = 0;
if (temporary.size() < tmp.size()) {
size = temporary.size();
mutex = 1;
} else {
size = tmp.size();
}
up = 0;
for (int i = temporary.size() - 1, j = tmp.size() - 1; i >= 0 && j>= 0; i--, j--) {
int r = (temporary[i] - '0') + (tmp[j] - '0') + up;
temporary[i] = r % 10 + '0';
up = r / 10;
}
if (mutex == 0) {
for (int i = temporary.size() - tmp.size() - 1; i >= 0 && up != 0; i--) {
int r = (temporary[i] - '0') + up;
temporary[i] = r % 10 + '0';
up = r / 10;
}
if (up != 0) {
string t = "";
t += up + '0';
t += temporary;
temporary = t;
}
} else {
string t;
for (int i = tmp.size() - temporary.size() - 1; i >= 0; i--) {
int r = (tmp[i] - '0') + up;
t += r % 10 + '0';
up = r / 10;
}
reverse(t.begin(), t.end());
t += temporary;
if (up != 0) {
temporary = "";
temporary += up + '0';
temporary += t;
} else {
temporary = t;
}
}
}
result = temporary;
}
if (dot_size == 0) {
return result;
}
if (result.size() < dot_size) {
string t = ".";
for (int i = 0; i < dot_size - result.size(); i++) {
t += '0';
}
t += result;
return t;
}
result.insert(result.size() - dot_size, 1, '.');
return result;
}
int main(void)
{
string s;
int n;
//vector<string> result;
while (cin >> s >> n) {
float input;
istringstream input_value(s);
input_value >> input;
if (input > 99.999 || fabs(input - 99.999) <= numeric_limits<float>::epsilon() || input < 0 || fabs(input) <= numeric_limits<float>::epsilon() || n <= 0 || n > 25) {
cerr << "wrong input!" << endl;
exit(-1);
} else {
s = power(s, n);
cout << s << endl;
// result.push_back(power(s, n));
}
}
/*for (vector<string>::const_iterator iter = result.begin(); iter != result.end(); ++iter) {
cout << *iter << endl;
}*/
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator