当前位置: 代码迷 >> 综合 >> LeetCode 43 每日一题 Day30.
  详细解决方案

LeetCode 43 每日一题 Day30.

热度:21   发布时间:2024-02-10 19:09:41.0

第三十篇笔记!
这题还是蛮复杂的,最初想做大整数惩罚,结果发现这题根本不是这个意思,要自己实现字符串相乘,先要实现字符串相加,相加的是前几天的题,我刚好手撸了一遍,大体思路是对的,细节上还是有点偏差。
说复杂,其实也不复杂,就是手动实现一个竖式乘法,将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;}
};