字符串乘法,简单易懂,包含由字符串加法和字符串与单字符乘法结合而成
字符串加法和字符串与单字符乘法见 简单常用的一些函数,个人的函数库 的13和14
#include <algorithm>
#include <iostream>
#include <string>
using namespace std;
string addStrings(string num1, string num2) {
string str;
int cur = 0, i = num1.size() - 1, j = num2.size() - 1;
//从字符串的末尾(我们数字的个位)开始加,直到加到最高位加完
while (
i >= 0 || j >= 0 ||
cur !=
0) { //判断是否加完,其实根据||的计算方式,cur!=0只会在把两个字符串的元素遍历完才会判断。一般来讲只有两个字符串相等且加了有进位的才会判断到这儿
if (i >= 0)
cur += num1[i--] - '0'; //判断字符串1是否所有元素加完
if (j >= 0)
cur += num2[j--] - '0'; //判断字符串2是否所有元素加完
str += to_string(cur % 10); //取低位变成字符加到字符串中
cur /= 10; //判断有无进位
}
reverse(str.begin(), str.end()); //把字符串倒置
return str;
}
string StringMultiplyDigit(string str, char n) {
reverse(str.begin(), str.end());
string res = "";
int digit1 = n - '0', carry = 0, digit2 = 0, product = 0;
for (int i = 0; i < str.size(); i++) {
digit2 = str[i] - '0';
product = digit1 * digit2 + carry;
res = res + to_string(product % 10);
carry = product / 10;
}
if (carry) {
res = res + to_string(carry);
}
reverse(res.begin(), res.end());
return res;
}
int main() {
string a = "1455", b = "449075";
int i = b.size() - 1;
string res = StringMultiplyDigit(a, b[i]); //初始化为最后一个字符的乘积
string temp = "";
string buling ="";
i--; //字符来到倒数第二个
for (; i >= 0; --i) {
temp = StringMultiplyDigit(a, b[i]);
buling = buling + '0';
temp = temp + buling; //手动模拟乘10操作
res = addStrings(res, temp);
}
cout << res << endl;
getchar();
return 0;
}