LeetCode 43 每日一题 Day30.

第三十篇笔记!
这题还是蛮复杂的,最初想做大整数惩罚,结果发现这题根本不是这个意思,要自己实现字符串相乘,先要实现字符串相加,相加的是前几天的题,我刚好手撸了一遍,大体思路是对的,细节上还是有点偏差。
说复杂,其实也不复杂,就是手动实现一个竖式乘法,将num2的每一位单独取出来和num1整体相乘,结果累加,值得注意的是要在后面加上相应个数的0。
最令人烦躁的还是要属字符ascii码转换的部分,疏忽了好几个地方,排除一个bug,结果还是不对,最后发现错误都是出在ascii码上了。
大体思路就这些了,上代码吧

class Solution {
public:
    string multiply(string num1, string num2) {
        if(num1=="0"||num2=="0") return "0";
        int i=num1.length()-1,j=num2.length()-1;
        int add=0,next;
        string res;
        while(j>=0)
        {
            int y=num2[j]-'0';
            string cur;
            next=0;add=0;
            while(i>=0)
            {
                int x=num1[i]-'0';
                next=x*y+add;
                add=next/10;
                cur.push_back(next%10+'0');
                i--;
            }
            if(add>0)
                cur.push_back(add+'0');
            reverse(cur.begin(),cur.end());
            for(int n=0;n<num2.length()-j-1;n++)
                cur.push_back('0');
            res=plus(res,cur);
            j--;
            i=num1.length()-1;
        }
        return res;
    }
    string plus(string num1,string num2)
    {
        int i=num1.length()-1,j=num2.length()-1;
        int add=0,next;
        string res;
        while(i>=0||j>=0||add!=0)
        {
            int x=i<0 ? 0: num1[i]-'0';
            int y=j<0 ?0:num2[j]-'0';
            next=x+y+add;
            res.push_back(next%10+'0');
            add=next>9?1:0;
            i--;
            j--;
        }
        reverse(res.begin(),res.end());
        return res;
    }
};

你可能感兴趣的:(LeetCode,C++,算法,字符串,leetcode)