当前位置:网站首页>Letcode43: string multiplication
Letcode43: string multiplication
2022-07-08 00:49:00 【New Young】
Preface :
subject
letcode:https://leetcode.cn/problems/multiply-strings/description/

Ideas

Code
// Ideas :
// Store the result of each multiplication in the array
// And
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)
{
// As a result, it is impossible to fill the array , This is an invisible explanation
// Because the starting data header of each array is different , So use begin Let's start
int gap = 0;// Carry device
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)// The number of result digits is greater than 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;
}
// The number of arrays depends on the shortest length string
int** arr = new int* [min];
// The number of digits of the result of multiplying multiple numbers cannot be greater than the sum of digits of each number , Therefore, the length of each array is len1+len2;
for (size_t i = 0; i < min; ++i)
{
arr[i] = new int[len];
memset(arr[i], 0, sizeof(int) * (len));// The initialization space is 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;// Carry device
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;
}
};
边栏推荐
猜你喜欢

How to insert highlighted code blocks in WPS and word

5g NR system messages

Operating system principle --- summary of interview knowledge points

RPA cloud computer, let RPA out of the box with unlimited computing power?

Installation and configuration of sublime Text3

Cancel the down arrow of the default style of select and set the default word of select

“一个优秀程序员可抵五个普通程序员”,差距就在这7个关键点

RPA云电脑,让RPA开箱即用算力无限?

"An excellent programmer is worth five ordinary programmers", and the gap lies in these seven key points

1293_FreeRTOS中xTaskResumeAll()接口的实现分析
随机推荐
ThinkPHP kernel work order system source code commercial open source version multi user + multi customer service + SMS + email notification
Installation and configuration of sublime Text3
国外众测之密码找回漏洞
韦东山第三期课程内容概要
How to learn a new technology (programming language)
Introduction to paddle - using lenet to realize image classification method I in MNIST
Password recovery vulnerability of foreign public testing
1293_FreeRTOS中xTaskResumeAll()接口的实现分析
德总理称乌不会获得“北约式”安全保障
C# 泛型及性能比较
QT adds resource files, adds icons for qaction, establishes signal slot functions, and implements
Prompt configure: error: required tool not found: libtool solution when configuring and installing crosstool ng tool
Service Mesh的基本模式
[Yugong series] go teaching course 006 in July 2022 - automatic derivation of types and input and output
How does the markdown editor of CSDN input mathematical formulas--- Latex syntax summary
[研发人员必备]paddle 如何制作自己的数据集,并显示。
玩轉Sonar
C language 001: download, install, create the first C project and execute the first C language program of CodeBlocks
8道经典C语言指针笔试题解析
Development of a horse tourism website (realization of login, registration and exit function)