10.09中金所笔试
长整数乘法
给两个字符串整数,返回其乘积(直接类型转换会overflow)
string multiply(string str1, string str2) { if (str1.empty() || str2.empty()) return ""; vector<int> vec1(str1.length(), 0); vector<int> vec2(str2.length(), 0); //将两个长整数翻转保存在数组中 for (size_t i = 0; i < str1.length(); ++i) vec1[str1.length() - 1 - i] = str1[i] - '0'; for (size_t i = 0; i < str2.length(); ++i) vec2[str2.length() - 1 - i] = str2[i] - '0'; //构造一个(n+1) + (m+1)的数组用来保存其相乘结果。 int n = vec1.size() + 1 + vec2.size() + 1; vector<int> res(n, 0); //将两个长整数单个位进行相乘并加上对应位置数然后存储 for (size_t i = 0; i < vec1.size(); ++i) { for (size_t j = 0; j < vec2.size(); ++j) { res[i + j] = res[i + j] + vec1[i] * vec2[j]; } } //遍历整个res数组进行进位操作。 int carry = 0; //进位 for (size_t i = 0; i < n; ++i) { int temp = res[i] + carry; res[i] = temp % 10; carry = temp / 10; } //去掉多余的0然后转为字符串存储 string ret; while (n-- > 0) { if (res[n] != 0) break; } while (n >= 0) { char ch = res[n--] + '0'; ret.push_back(ch); } if (ret.empty()) ret = "0"; return ret; } ———————————————— 版权声明:本文为CSDN博主「Wkingbai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_36291615/article/details/126732285