字符串乘法,简单易懂,包含由字符串加法和字符串与单字符乘法结合而成

          字符串加法和字符串与单字符乘法见 简单常用的一些函数,个人的函数库 的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;
}
上一篇:Leetcode链表算法


下一篇:LeetCodeHOT100——第二题:两数相加(No.2)