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<string> #include<stdlib.h> #include<vector> using namespace std; string multiply(const char* x, const char* y);//整数乘法 string exponentiationInt(const char* x, int y);//整数幂运算 string exponentiation(const char* x, int y);//输入输出格式处理 int main(void) { string s; int n; vector<string> vs; vector<int> vi; while (cin >> s >> n){ //不匹配时退出 vs.push_back(s); vi.push_back(n); } for (int i = 0; i < vs.size(); i++){ cout << exponentiation(vs[i].c_str(), vi[i]).c_str() << endl; } system("pause"); return 0; } string multiply(const char* x, const char* y){ if (y == NULL)y = x; if (string(y) == "0" || string(x) == "0") return "0"; int l1 = strlen(x); int l2 = strlen(y); int l = l1 + l2; int *temp = new int[l]; memset(temp, 0, l*sizeof(int)); int k = 0; for (int i = l2 - 1; i >= 0; i--){ k = l2 - i - 1; for (int j = l1 - 1; j >= 0; j--){ temp[k++] += (y[i] - '0')*(x[j] - '0'); } } for (int i = 0; i<l - 1; i++){ temp[i + 1] += temp[i] / 10; temp[i] = temp[i] % 10; } string str = ""; for (int i = l - 1; i >= 0; i--){ str += temp[i] + '0'; } delete[]temp; if (str[0] == '0') str.erase(0, 1); return str; } string exponentiationInt(const char* x, int y){ if (y >= 0){ if (y == 1){ return x; } else if (y == 0) return "1"; return multiply(x, exponentiationInt(x, y - 1).c_str()); } else{ return "0"; } } string exponentiation(const char* x, int y){ /*1、清除字串x前后的0; 2、如果有小数点,清除并记录位置; 3、判断字串(如果x全0,返回0,否则:如果y为0,返回1) */ string s = x; int pos = 0; //1、清除字串x前的0; int len = s.length(); for (int i = 0; i <len; i++){ if (s[0] != '0') break; else s.erase(0, 1); } //清除字串x小数点后的0; if (s != "") while (*(s.end() - 1) == '0'&&s.length()>s.find('.')) s.erase(s.length() - 1, 1); //2、存在小数点时 if (s.find(".") != string::npos){ pos = s.find('.'); //记录位置 s.erase(pos, 1); //清除 pos = (s.length() - pos) *y; //小数点在最终结果时的位置 } //3、判断字串(如果x全0,返回0,否则:如果y为0,返回1) if (s == "") return "0"; if (y == 0) return "1"; //4、计算,补小数点 string res = exponentiationInt(s.c_str(), y); if (pos!=0){ if (pos - int(res.length()) > 0){ //这里先在结果字串前补0 res = res.insert(0, (pos - int(res.length())), '0'); } res = res.insert((res.length() - pos), 1, '.');//插入小数点 } return res; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator