大数相乘
发布时间:2020-12-14 02:04:17 所属栏目:大数据 来源:网络整理
导读:参考地址:http://www.cnblogs.com/heyonggang/p/3599857.html 代码如下: /*****************************************************************************Prototype : multiplyDescription : 两个任意长度的长整数相乘,输出结果Input Param :const std::
参考地址:http://www.cnblogs.com/heyonggang/p/3599857.html 代码如下: /***************************************************************************** Prototype : multiply Description : 两个任意长度的长整数相乘,输出结果 Input Param : const std::string strMultiplierA 乘数A const std::string strMultiplierB 乘数B Output : std::string strRst 乘法结果 Return Value : int 0 正确 -1 异常 *****************************************************************************/ int multiply(const std::string strMultiplierA,const std::string strMultiplierB,std::string &strRst) { if (strMultiplierA.length() == 0 || strMultiplierB.length() == 0) { return -1; } /* 在这里实现功能 */ vector<int> vecA,vecB,vecC; string strA = strMultiplierA; int i = 0,j = 0; /*将字符串转换为数字并翻转*/ /*将字符串转换为数字并翻转*/ for (i = strA.size() - 1; i >= 0; i--) { vecA.push_back(strA[i] - '0'); } for (i = strMultiplierB.size() - 1; i >= 0; i--) { vecB.push_back(strMultiplierB[i] - '0'); } vecC.resize(vecA.size() + vecB.size()); /**逐位相乘*/ for (i = 0; i < vecA.size(); i++) { for (j = 0; j < vecB.size(); j++) { vecC[i + j] += vecA[i] * vecB[j]; } } /*消除进位*/ for (i = vecC.size() - 1; i >= 0; i--) { if (vecC[i] != 0) { break; } else { vecC.pop_back(); } } int c = 0; for (i = 0; i < vecC.size(); i++) { vecC[i] += c; c = vecC[i] / 10; vecC[i] = vecC[i] % 10; } if (c != 0) { vecC.push_back(c); } /*将计算结果转换为字符串并翻转*/ for (i = 0; i < vecC.size(); i++) { strRst.push_back(char(vecC[i] + '0')); } reverse(strRst.begin(),strRst.end()); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |