题目描述
题解
预先分配好字符串的长度,在每一位计算对应结果,乘法和加法同时进行
这里还要利用几个规律:
- 长度为m和n的两个数相乘,结果的长度不会超过m+n,所以先定义一个m+n的字符串用来存放结果
- 然后第i位(0<=i<=m-1)和第j位(0<=j<=n-1)的乘积对应结果的第i+j+1位,进位要进到第i+j位
注意点:
- 最后要检查结果的高位是否有多余的'0',要排除结果本身就是'0'的特殊情况。
string的常用方法:
- 构造
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:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串 第一个整数
* @param t string字符串 第二个整数
* @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;
}