題目描述

image.png
題解
預(yù)先分配好字符串的長度,在每一位計算對應(yīng)結(jié)果,乘法和加法同時進(jìn)行
這里還要利用幾個規(guī)律:
- 長度為m和n的兩個數(shù)相乘,結(jié)果的長度不會超過m+n,所以先定義一個m+n的字符串用來存放結(jié)果
- 然后第i位(0<=i<=m-1)和第j位(0<=j<=n-1)的乘積對應(yīng)結(jié)果的第i+j+1位,進(jìn)位要進(jìn)到第i+j位
注意點:
- 最后要檢查結(jié)果的高位是否有多余的'0',要排除結(jié)果本身就是'0'的特殊情況。
string的常用方法:
- 構(gòu)造
string s(n, c)
上式定義了一個長度為n的字符串,字符串中每個元素均為字符c
- 求長度
s.size()
- 從某個位置刪除一個或多個字符
s.erase(int pos, int n)
其中pos為要刪除第一個字符的位置,n為刪除的長度
代碼
// solve.cpp
#include <iostream>
#include <string>
using namespace std;
class Solution {
public:
/**
* 代碼中的類名、方法名、參數(shù)名已經(jīng)指定,請勿修改,直接返回方法規(guī)定的值即可
*
* @param s string字符串 第一個整數(shù)
* @param t string字符串 第二個整數(shù)
* @return string字符串
*/
string solve(string s, string t) {
// write code here
int temp;
string result(s.size() + t.size(), '0');
for (int i = s.size() - 1; i >=0; i--){
for (int j = t.size() - 1; j >=0; j--){
temp = (s[i] - '0') * (t[j] - '0') + (result[i + j + 1] - '0');
result[i + j + 1] = temp % 10 + '0';
result[i + j] += temp / 10;
}
}
int i = 0;
while (result[i] == '0' && i < result.size() - 1){
i++;
}
result.erase(0, i);
return result;
}
};
int main(){
string a = "11";
string b = "99";
Solution s;
cout << s.solve(a, b) << endl;
return 0;
}