LeetCode题解——Multiply Strings
Given two numbers represented as strings,return multiplication of the numbers as a string. Note: The numbers can be arbitrarily large and are non-negative. 此题可以用来求两个大数相乘。 思路:逐位相乘处理进位法。 假设两个字符串a和b以及保存结果的字符串c. 对每个i,j;将a[i]*b[j]的结果加上c[i+j+1]上,所以c[i+j+1]是所有i+j位的乘积的累加。得到每位的结果后,在进行进位处理。最后再去掉c前面的'0',得到的结果即为最终结果。 乘积是逐位相乘,也就是ai*bj,结果加入到积C的第i+j+1位,最后处理进位即可,例如:A =17 = 1*10 + 7 = (1,7)最后是十进制的幂表示法,幂次是从高位到低位,以下同。B=25 = 2*10 + 5 = (2,5);C?=?A?*?B?(?0,1?2,?5?+?2?7,7?5)?(0,75); font-family:'Times New Roman'; font-size:18.3999996185303px">2,19,35)?)?)=(4,5)。
class Solution { public: string multiply(string num1,string num2) { if(!num1.size() || !num2.size()) return NULL; int N1 = num1.size(),N2 = num2.size(); vector<int> ans(N1+N2,0); //逐位运算 for(int i=0; i<N1; i++){ for(int j=0; j<N2; j++){ ans[i+j+1] += (num1[i]-'0')*(num2[j]-'0'); } } // 处理进位 for(int i = ans.size()-1; i>=0; i--){ if(ans[i]>=10){ ans[i-1] += ans[i]/10; ans[i] %= 10; } } //去掉多余的0 int i =0 ; while(ans[i]==0 && i<ans.size()-1) i++; string s(ans.size()-i,'0'); for(int j=0;i<ans.size();i++,j++){ s[j]='0'+ans[i]; } return s; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |