大整数乘法
来源:互联网 发布:gopro软件中文版 编辑:程序博客网 时间:2024/06/05 05:23
#include <iostream>#include <string>using namespace std;class StringMultiply{private:string x;string y;public:StringMultiply(string x, string y){//对齐if (x.length() < y.length()){while (x.length() < y.length()){x = "0" + x;}}if (x.length() > y.length()){while (x.length() > y.length()){y = "0" + y;}}this->x = x;this->y = y;}string doMultiply(string x, string y){//边界条件if (x.empty() || y.empty()){return "";}if (x.length() == 1 && y.length() == 1){int vx = x[0] - '0';int vy = y[0] - '0';int vz = vx * vy;return to_string(vz);}int xlen = x.length() / 2;string xh = x.substr(0, xlen);string xl = x.substr(xlen, x.length());int ylen = y.length() / 2;string yh = y.substr(0, ylen);string yl = y.substr(ylen, y.length());string p1 = doMultiply(xh, yh);for (int i = 0; i < xl.length() + yl.length(); i++){p1 += "0";}string p2 = doMultiply(xh, yl);for (int i = 0; i < yl.length(); i++){p2 += "0";}string p3 = doMultiply(xl, yh);for (int i = 0; i < xl.length(); i++){p3 += "0";}string p4 = doMultiply(xl, yl);string r = stringAdd(p1, p2);r = stringAdd(r, p3);r = stringAdd(r, p4);return r;}//相加string stringAdd(string x, string y){//由于数值计算的原因有可能导致字符串长度不同if (x.length() < y.length()){int len = y.length() - x.length();for (int i = 0; i < len; i++){x = "0" + x;}}if (x.length() > y.length()){int len = x.length() - y.length();for (int i = 0; i < len; i++){y = "0" + y;}}int len = x.length() - 1;string result = "";int advance = 0;while (len >= 0){int vx = x[len] - '0';int vy = y[len] - '0';int vz = vx + vy + advance;advance = vz / 10;result = to_string(vz % 10) + result;len--;}//cout << result << endl;if (advance > 0)result = to_string(advance) + result; //去除最高位的0int rlen = result.length();int i = 0;while (i < rlen && result[i] == '0'){result = result.substr(0, 1);i++;}return result;}string getResult(){return doMultiply(this->x, this->y);}};int main(){string x = "10";string y = "123";StringMultiply strMul(x, y);cout << strMul.getResult() << endl;return 0;}
/*
问题描述:大整形数相乘,假定有两个字符串表示的整形数,要求写一个函数,实现两个数字字符串的乘积,函数返回值也是字符串。
来源:网易算法课
作者:syt
日期:2017-9-28
思路:采用公开课里面的分治的思想,将一个字符串逐步划分成单个字符串相乘,最后相加得到最后的字符串,算法最后没有对最高位是0做处理,补充了对最高位的处理
*/
阅读全文
0 0
- 大整数乘法
- C++大整数乘法
- 大整数FFT乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法。。。。。
- 大整数乘法
- 大整数乘法
- // //大整数乘法
- 大整数乘法
- 大整数乘法算法
- 【算法】 大整数乘法
- 大整数乘法
- 大整数乘法
- 大整数乘法。
- 大整数乘法
- 机器学习算法推导
- SpringBoot学习之整合Redis(jedis版)
- bzoj1297 [SCOI2009]迷路(矩阵优化)
- python中List添加、删除元素的几种方法
- 类的几个关键字
- 大整数乘法
- severlet get post 请求 响应
- Android之单方向滑动的Viewpager
- TypeError: unhashable type: 'matrix'解决方法
- 第5周项目3-括号的匹配
- n个人中每m个出队一次
- 用户 角色 权限 菜单
- LeetCode:Palindrome Number
- iOS 快捷键~新文件、编辑、调试