题解 | 大数乘法

大数乘法

https://www.nowcoder.com/practice/c4c488d4d40d4c4e9824c3650f7d5571

class Solution {
  public:
    //两个字符串相加
    string SumString(string& s, string& t) {
        //s -- 总
        //t -- 新
        string str;
        int i = s.size() - 1;
        int j = t.size() - 1;
        int ret = 0;
        while (i >= 0 || j >= 0) {
            int sum = 0;
            if (i >= 0) {
                sum += s[i] - '0';
                i--;
            }
            if (j >= 0) {
                sum += t[j] - '0';
                j--;
            }
            sum += ret;
            str += sum % 10 + '0';
            ret = sum / 10;
        }
        if (ret) str += ret + '0';
	  // s --> "99"
	  // t --> "990"
	  //9801 -->需要翻转
        reverse(str.begin(), str.end());
        return str;
    }
    string solve(string s, string t) {
        if(s[0] == '0'||t[0] == '0')return "0";//如果有一个字符串为0,直接返回
        // write code here
        string str;//总字符串
        for (int i = s.size() - 1; i >= 0; i--) {
            string s1;
            int ret = 0;
		  //用s字符串中的每一个数字字符去乘以t字符串整个字符
            for (int j = t.size() - 1; j >= 0; j--) {
                int sum = (t[j] - '0') * (s[i] - '0') + ret;
                s1 += sum % 10 + '0';
                ret = sum / 10;
            }
            if (ret) s1 += ret + '0';
            //翻转字符串
            reverse(s1.begin(), s1.end());
            //进位逻辑
            int cnt = s.size() - 1 - i;
            while (cnt--) {
                s1 += '0';
            }
			//第一次的字符串结果作为总字符串结果
            if (i == s.size() - 1) {
                str = s1;
            } else {
			  //处理两个字符串相加的逻辑
                str = SumString(str, s1);
            }
        }
        return str;
    }
};

#00后45度躺现状#
全部评论

相关推荐

点赞 评论 收藏
分享
在瑞幸干两年,奥特曼都得闪灯
不知名的牛友:奥特曼每天只上3分钟班
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务