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 |
请注意以下数据,代码附上1. 10.000 2 2. 10000. 2 3. 0.0000 2 4. 100000 2 我在做的时候,忽略了第一种情况,结果总是wa。代码奉上,如下: #include <iostream> #include <string> #include <sstream> #define Max_Digit_Number 150 #define Max_Arr_Number 20 #define Len_Every 8 //The length of each small integer in each position of the ivec; #define Modular_Number 100000000 //The int number stored in every array contains 8 digits typedef unsigned int uint; using namespace std; unsigned int string_to_uint(const string& s) { stringstream ss(s); unsigned int value; ss >> value; return value; } string uint_to_string(const uint x) { stringstream ss; string s; ss << x; ss >> s; return s; } class BigInt //BigInt for positive integers { friend BigInt multiply(const BigInt&, const BigInt&); friend BigInt power(const BigInt&, int); private: string number; uint int_arr[Max_Arr_Number]; uint arr_size; public: BigInt(string n=""); BigInt(const BigInt&); BigInt& operator=(const BigInt&); string get_number() { return number; } void print() { // for(int i=arr_size-1; i>=0; i--) // cout << int_arr[i]; // cout << endl; cout << number << endl; } }; BigInt power(const BigInt& num, int n) { if(n == 0) return BigInt("1"); else if(num.number == "0") return num; else if(n == 1) return num; else if(n % 2 == 0) { int k = n/2; BigInt tmp = power(num, k); return multiply(tmp, tmp); } else { BigInt tmp = power(num, n-1); return multiply(tmp, num); } } BigInt& BigInt::operator=(const BigInt& b) { number = b.number; arr_size = b.arr_size; for(size_t i=0; i<arr_size; i++) int_arr[i] = b.int_arr[i]; return *this; } BigInt::BigInt(const BigInt& b) { number = b.number; arr_size = b.arr_size; for(size_t i=0; i<arr_size; i++) int_arr[i] = b.int_arr[i]; } BigInt::BigInt(string n):number(n) { if(number.empty()) { arr_size = 1; int_arr[arr_size-1] = 0; } else { uint num = string_to_uint(number); arr_size = 1; int_arr[arr_size-1] = num; } } BigInt multiply(const BigInt& num1, const BigInt& num2) { BigInt res_int; for(size_t i=0; i<Max_Arr_Number; i++) res_int.int_arr[i] = 0; for(size_t i=0; i<num1.arr_size; i++) for(size_t j=0; j<num2.arr_size; j++) { size_t k = i+j; long long int tmp = static_cast<long long int>(num1.int_arr[i]) * static_cast<long long int>(num2.int_arr[j]); long long int tmp2; while(true) { if(tmp == 0) break; tmp += static_cast<long long int>(res_int.int_arr[k]); tmp2 = tmp % static_cast<long long int>(Modular_Number); tmp = tmp / static_cast<long long int>(Modular_Number); res_int.int_arr[k] = tmp2; k ++; } } int i = num1.arr_size + num2.arr_size - 1; while( i >= 0 && res_int.int_arr[i] == 0) i--; res_int.arr_size = i+1; string s =""; for(int i=res_int.arr_size-1; i>=0; i--) { string tmp = uint_to_string(res_int.int_arr[i]); if(tmp.size() < Len_Every) { if(i < res_int.arr_size - 1) tmp = tmp.insert(0, Len_Every - tmp.size(), '0'); } s += tmp; } res_int.number = s; return res_int; } int main() { string s; int n; while(cin >> s >> n) { size_t after_len = 0; size_t index = 0; while(index < s.size() && s[index] != '.') index ++; // s.erase(index, 1); // BigInt b1(s); // BigInt c1 = power(b1, n); // c1.print(); // continue; if(index < s.size()) { after_len = s.size() - index - 1; after_len = n * after_len; } s.erase(index, 1); size_t start = 0; while(start < s.size() && s[start] == '0') start ++; if( start == s.size()) s = "0"; else s = s.substr(start); BigInt b(s); BigInt c = power(b, n); string res = c.get_number(); if(res.size() < after_len) { int dif = after_len - res.size(); res.insert(0, dif, '0'); res.insert(0, 1, '.'); } else if(after_len > 0) { int index = res.size() - after_len; res.insert(index, 1, '.'); } if(after_len > 0) { int i=res.size() - 1; while(i>=0 && res[i] == '0') i --; if(res[i] == '.') i --; res.erase(i+1, res.size()-i-1); if(res.empty()) res = "0"; } cout << res << endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator