/*本意是想將字符串挨個字符轉換成數字做乘法,然後在同一將數字轉換成字符串,但是類型出現混亂貌似會溢出longlong 類型也不行,貌似此方法行不通,因此只能藉助一個數組來存儲得到結果的每一位數字,但是在其中需要注意的是相乘後發生的進位情況,由於在申請空間時,有可能會出現空間過大,導致後面會出現補貼的0值,這要在後面處理掉*/
class Solution {
public:
string multiply(string num1, string num2) {
if (num1.empty() || num2.empty())
return "";
int len1 = num1.size();
int len2 = num2.size();
int flag1 = 0,flag2=0;
while (num1[flag1++]=='0')
if (flag1 == len1)
return "0";
while (num2[flag2++] == '0')
if (flag2 == len2)
return "0";
string result;
reverse(num1.begin(), num1.end());//先反轉字符串
reverse(num2.begin(), num2.end());
vector<int> Result(len1+len2);//存放每一個位數的結果
int count1 = 0, count2 = 0;
int sum=0;//sum代表的是最後結果;
int residue = 0;//residue代表的是一次最終的數字;
for (int i = 0; i < len1; i++)
{
int add=0;//add代表的是進位
count1 = num1[i] - 48;
for (int j = 0; j < len2; j++)
{
count2 = num2[j] - 48;
sum = count1*count2 + add + Result[i + j];
residue = sum % 10;//除10取餘得到結果數字
add = sum / 10;//進位
Result[i + j] = residue;
}
if (add>0)
Result[i + len2] = Result[i + len2]+ add;//這是一次循環結束後出現進位
}
for (int i = Result.size()-1; i >= 0; i--)//將數字轉換成字符串,注意在非0元素後面的0要在後面步驟中刪除
result.push_back(Result[i]+48);
int k=0;
while(result[k++]=='0');//找到第一個非‘0’的位置;
result.erase(result.begin(),result.begin()+k-1);//刪除轉換後字符串前面的‘0’
return result;
}
};
43. Multiply Strings
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.