当前位置:网站首页>letcode43:字符串相乘
letcode43:字符串相乘
2022-07-07 22:58:00 【New Young】
前言:
题目
letcode:https://leetcode.cn/problems/multiply-strings/description/
思路
代码
//思路:
//用每位相乘的结果存放到数组中即可
//且
void reverseString(string& s) {
size_t i = 0;
size_t j = s.size() - 1;
for (; i < j; ++i, --j)
{
std::swap(s[i], s[j]);
}
}
void Sum(int* arr, int begin, const string& num, const char& ch)
{
//结果是不可能把数组填满的,这是隐形的说明
//因为每个数组的启始数据头是不同的,所以用begin来开始
int gap = 0;//进位器
int len = num.size();
int i = 0;
int j = len - 1;
while (i < len && j >= 0)
{
int sum = (num[j] - '0') * (ch - '0') + gap;
gap = sum / 10;
arr[begin - i] = sum % 10;
++i;
--j;
}
if (gap != 0)//结果位数大于len
{
arr[begin - i] = gap;
++i;
}
}
class Solution {
public:
string multiply(string num1, string num2) {
if ((strcmp(num1.c_str(), "0") == 0)
|| (strcmp(num2.c_str(), "0") == 0))
{
string s = "0";
return s;
}
size_t len1 = num1.size();
size_t len2 = num2.size();
size_t len = len1 + len2;
size_t min = len1;
if (len1 > len2)
{
min = len2;
}
//数组的个数取决于最短长度的string
int** arr = new int* [min];
//多位数相乘的结果位数不可能大于每位数的数位之和,因此每个数组长度取len1+len2;
for (size_t i = 0; i < min; ++i)
{
arr[i] = new int[len];
memset(arr[i], 0, sizeof(int) * (len));//初始化空间为0
}
if (min == len2)
{
for (size_t i = 0; i < min; ++i)
{
Sum(arr[i], len - 1 - i, num1, num2[len2 -1- i]);
}
}
else
{
for (size_t i = 0; i < min; ++i)
{
Sum(arr[i], len - 1 - i, num2, num1[len1 - 1 - i]);
}
}
int gap = 0;//进位器
int* tmp = new int[len];
memset(tmp, 0, sizeof(int) * (len));
for (int i = len - 1; i >= 0; --i)
{
int sum = gap;
for (int j = 0; j < min; ++j)
{
sum += arr[j][i];
}
gap = sum / 10;
tmp[i] = sum % 10;
}
int i = 0;
string s;
while (i < len)
{
if (tmp[i] != 0)
{
for (int j = i; j < len; ++j)
{
s += tmp[j] + '0';
}
break;
}
++i;
}
return s;
}
};
边栏推荐
- If an exception is thrown in the constructor, the best way is to prevent memory leakage?
- 51 communicates with the Bluetooth module, and 51 drives the Bluetooth app to light up
- 3 years of experience, can't you get 20K for the interview and test post? Such a hole?
- Su embedded training - Day3
- Tencent security released the white paper on BOT Management | interpreting BOT attacks and exploring ways to protect
- SDNU_ ACM_ ICPC_ 2022_ Summer_ Practice(1~2)
- Reptile practice (VIII): reptile expression pack
- Lecture 1: the entry node of the link in the linked list
- 1293_ Implementation analysis of xtask resumeall() interface in FreeRTOS
- LeetCode刷题
猜你喜欢
Qt添加资源文件,为QAction添加图标,建立信号槽函数并实现
51与蓝牙模块通讯,51驱动蓝牙APP点灯
[研发人员必备]paddle 如何制作自己的数据集,并显示。
"An excellent programmer is worth five ordinary programmers", and the gap lies in these seven key points
Tencent security released the white paper on BOT Management | interpreting BOT attacks and exploring ways to protect
redis你到底懂不懂之list
Single machine high concurrency model design
8道经典C语言指针笔试题解析
1293_FreeRTOS中xTaskResumeAll()接口的实现分析
How does the markdown editor of CSDN input mathematical formulas--- Latex syntax summary
随机推荐
Emotional post station 010: things that contemporary college students should understand
[programming questions] [scratch Level 2] March 2019 garbage classification
Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
“一个优秀程序员可抵五个普通程序员”,差距就在这7个关键点
52歲的周鴻禕,還年輕嗎?
Reptile practice (VIII): reptile expression pack
去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
Scrapy framework
Installation and configuration of sublime Text3
Binder核心API
The underlying principles and templates of new and delete
Introduction to paddle - using lenet to realize image classification method I in MNIST
SQL knowledge summary 004: Postgres terminal command summary
3 years of experience, can't you get 20K for the interview and test post? Such a hole?
Zhou Hongqi, 52 ans, est - il encore jeune?
[programming problem] [scratch Level 2] 2019.09 make bat Challenge Game
Single machine high concurrency model design
Operating system principle --- summary of interview knowledge points
The method of server defense against DDoS, Hangzhou advanced anti DDoS IP section 103.219.39 x
An error is reported during the process of setting up ADG. Rman-03009 ora-03113