以下代码可以通过,主要思路是用字符串string来实现乘法,代码如下,写得不好的地方huan'ying'pi***'zhi'zheng
#include<iostream> #include<string> #include<vector> using namespace std; string myMultiplyString(string strU, string strB) { int numU = strU.size(); int numB = strB.size(); vector<int> mulResInt(numB+numU,0); int numVecResInt = mulResInt.size(); int intU, intB; for (int b = numB-1; b >= 0; b--) { // 下面的因子 for (int u = numU - 1; u >= 0; u--) { // 上面的因子 intU = strU[u] - '0'; intB = strB[b] - '0'; mulResInt[numB+numU -2-(u + b)] += intU * intB; } } // 开始进位 for (int k = 0; k < numB+numU -1; k++) { mulResInt[k + 1] += mulResInt[k] / 10; mulResInt[k] %= 10; } int numVecResStr; if (mulResInt[numVecResInt - 1] == 0)numVecResStr = numVecResInt-1; else numVecResStr = numVecResInt; string mulResStr(numVecResStr, '0'); // 组合成字符串 for (int k = 0; k < numVecResStr; k++) { mulResStr[numVecResStr - k - 1] += mulResInt[k]; } return mulResStr; } string mypow(string R, int n) { string powRes = "1"; for (int i = 0; i < n; i++) { powRes = myMultiplyString(powRes, R); } return powRes; } int mydelPoint(string &str) { // 如果字符串小数部分末尾几位是0,则先去除 int numXiaoshu = 0; auto pointPos = str.find('.'); if (pointPos != string::npos) { int n = str.size(); while (str[n - 1] == '0') { n--; } str.erase(str.begin() + n, str.end()); numXiaoshu = str.size() - pointPos - 1; str.erase(str.begin() + pointPos, str.begin() + pointPos + 1); } return numXiaoshu; } void myaddPoint(string &str, int pos) { str.insert(pos, "."); } int main() { string R; int n; vector<string> Rvec; vector<int> nvec; while (cin >> R >> n) { Rvec.push_back(R); nvec.push_back(n); if (cin.get() == '\n')break; } if (Rvec.size() != nvec.size())return 0; int iniNumXSInt,powNumXSInt; string iniNumXSStr; for (int i = 0; i < Rvec.size(); i++) { iniNumXSInt = mydelPoint(Rvec[i]); string temp = mypow(Rvec[i], nvec[i]); if (iniNumXSInt > 0) { powNumXSInt = temp.size() - nvec[i] * iniNumXSInt; myaddPoint(temp, powNumXSInt); } cout << temp; } cout << endl; return 0; }