这是关于一个普通双非本科大一学生的C++的学习记录贴
在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料
那么开启正题
今天分享的内容是string类,明天开始学习string的模拟实现
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
给定两个字符串形式的非负整数?num1
?和num2
?,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如?BigInteger
),?也不能直接将输入的字符串转换为整数形式
在实际运用中由于整形大小有限制,我们可以用字符串来存储数据
这题要实现字符串的加法,首先我们把个数对齐,逐次向上取数据,要注意的是两个数据可能一个比另一个长,我们用0来代替,最后还要注意会不会最后一位进位
class Solution {
public:
string addStrings(string num1, string num2)
{
string retstr;
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
int next = 0;
while(end1 >= 0 || end2 >= 0)
{
int n1 = 0;
int n2 = 0;
if(end1 >= 0)
n1 = num1[end1] - '0';
if(end2 >= 0)
n2 = num2[end2] - '0';
int num = n1 + n2 + next;
if(num >= 10)
{
num -= 10;
next = 1;
}
else
{
next = 0;
}
retstr.push_back(num + '0');
end1--;
end2--;
}
if(next == 1)
{
retstr.push_back('1');
}
reverse(retstr.begin(),retstr.end());
return retstr;
}
};
这是ac代码
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
给定两个以字符串形式表示的非负整数?num1
?和?num2
,返回?num1
?和?num2
?的乘积,它们的乘积也表示为字符串形式
这题相当于上面字符串相加的升级版
思路:一个字符串不变,另一个字符串从后向前遍历,实现一个字符与字符串相乘的函数,通过控制来达到两个字符串相乘的函数,当然对于有0参与的乘法记得特判
class solution {
public:
static string addStrings(string num1, string num2)
{
string retstr;
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
int next = 0;
while(end1 >= 0 || end2 >= 0)
{
int n1 = 0;
int n2 = 0;
if(end1 >= 0)
n1 = num1[end1] - '0';
if(end2 >= 0)
n2 = num2[end2] - '0';
int num = n1 + n2 + next;
if(num >= 10)
{
num -= 10;
next = 1;
}
else
{
next = 0;
}
retstr.push_back(num + '0');
end1--;
end2--;
}
if(next == 1)
{
retstr.push_back('1');
}
reverse(retstr.begin(),retstr.end());
return retstr;
}
};
class Solution {
public:
string _multiply(string s,char ch)
{
string retstr;
int num = ch - '0';
int end = s.size() - 1;
int next = 0;
while(end >= 0)
{
int n = num * (s[end] - '0') + next;
next = 0;
while(n >= 10)
{
n -= 10;
++next;
}
retstr.push_back(n + '0');
end--;
}
if(next)
retstr.push_back(next + '0');
reverse(retstr.begin(),retstr.end());
return retstr;
}
string multiply(string num1, string num2)
{
string s0 = "0";
if(num1 == "0" || num2 == "0")
return s0;
string retstr;
int begin = 0;
while(begin < num2.size())
{
string s = _multiply(num1,num2[begin]);
retstr.push_back('0');
retstr = solution::addStrings(retstr,s);
begin++;
}
return retstr;
}
};
这是ac代码
今天的博客就到这里了,后续内容明天分享,最近因为考试周原因不能更新太多内容,等考试周结束了再"快马加鞭"
新手第一次写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!!!