题意分析:不准使用大数类,进行大数乘法。
参考博客思路:传送门
可以参考下面的思路,自己在写的时候,存储结果的数组multi和下面不一样。
因此乘机的结果在数组中的位置是
[
i
+
j
,
i
+
j
+
1
]
[i+j,i+j+1]
[i+j,i+j+1],最后去除前导0即可。
class Solution {
public:
string multiply(string num1, string num2)
{
if(num1==""||num2=="")return "";
int a[1100];
memset(a,0,sizeof(a));
for(int i=num1.length()-1;i>=0;i--)
{
for(int j=num2.length()-1;j>=0;j--)
{
int mul=(num1[i]-'0')*(num2[j]-'0');
int summ=mul+a[i+j+1];
a[i+j]+=summ/10; //高位
a[i+j+1]=summ%10; //低位
}
}
string res="";
bool flag=0;
for(int i=0;i<num1.length()+num2.length();i++)
{
if(a[i]!=0){flag=1;}
if(flag) {res+=(char)(a[i]+'0');} //将数字转换成字符
}
if(!flag) return "0";
return res;
}
};