题解 | #大数乘法#

大数乘法

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

#include <algorithm>
#include <vector>
class Solution {
  public:
    string solve(string s, string t) {
        //首先逆序存储数字
        int slen = s.size();
        int tlen = t.size();
		if(s == "0" || t == "0") return "0";
		//int m = slen > tlen ? slen : tlen;
		vector<int> nums1(slen, 0);
		vector<int> nums2(tlen, 0);
		for(int i = 0; i < slen; i ++)nums1[slen - 1 - i] = (s[i] - '0');
		
		for(int i = 0; i < tlen; i++)nums2[tlen - 1 - i] = (t[i] - '0');
		for(int i = 0; i < tlen; i++) cout<<nums2[i];
		cout<<endl;
		vector<int> ans(slen + tlen, 0);
		for(int i = 0; i < slen; i ++){
			for(int j = 0; j < tlen; j++){
				ans[i + j] += (nums1[i] * nums2[j]);
			}
		}
		for(int i = 0; i < slen + tlen; i++){
			ans[i + 1] += ans[i] / 10;
			ans[i] %= 10;
		}
		string res;
		for(int i = 0; i < slen + tlen; i++)  res += (ans[i] + '0');
		reverse(res.begin(), res.end());
		int k = 0;
		while(res[k] == '0') k ++;
		return res.substr(k, res.size()); //这里可以知道reverse这个函数是整个逆转,所以ans中后面为零的元素全在res的字符串前方
    }
};

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务