用栈实现大数加法
发布时间:2020-12-14 02:19:41 所属栏目:大数据 来源:网络整理
导读:前天听到舍友说面试遇到一个大数加法的题(这里就不解释什么是大数运算了),自己想了几种方法,用字符串保存输入的大数字,然后分割成一个个比较小的数,存放在数组了,然后计算。还有就是用链表的方法,两条链表存放两个大数字,每个结点就是一个个位数,
前天听到舍友说面试遇到一个大数加法的题(这里就不解释什么是大数运算了),自己想了几种方法,用字符串保存输入的大数字,然后分割成一个个比较小的数,存放在数组了,然后计算。还有就是用链表的方法,两条链表存放两个大数字,每个结点就是一个个位数,然后从尾到头依次相加;自己也在网上找了一下大数运算的方法,这两种方法都有; #include <stack>
#include<deque>
#include<string>
#include<iostream>
using namespace std;
void BigNumberAdd(const string number1,const string number2)
{
if (number1.empty())
{
cout << number2 << endl;
return;
}
if (number2.empty())
{
cout << number1 << endl;
return;
}
deque<int> sum;
stack<int> num1;
stack<int> num2;
int temp = 0;
for (int i = 0; i < number1.length(); ++i)
{
temp = number1[i] - '0';
num1.push(temp);
}
for (int j = 0; j < number2.length(); ++j)
{
temp = number2[j] - '0';
num2.push(temp);
}
stack <int>::size_type add;
while (!num1.empty() && !num2.empty())
{
if (!num1.empty() && !num2.empty())
{
add = num1.top() + num2.top();
num1.pop();
num2.pop();
if (add >= 10)
{
add -= 10;
if (number1.length() > number2.length())
num1.top() += 1;
else
num2.top() += 1;
}
sum.push_back(add);
}
if (num1.empty())
{
while (!num2.empty())
{
if (num2.top() > 10)
{
add = num2.top() - 10;
num2.pop();
if (num2.empty())
{
sum.push_back(add);
sum.push_back(1);
break;
}
num2.top() += 1;
sum.push_back(add);
}
else
{
add = num2.top();
num2.pop();
sum.push_back(add);
}
}
}
else if (num2.empty())
{
while (!num1.empty())
{
if (num1.top() >= 10)
{
add = num1.top() - 10;
num1.pop();
if (num1.empty())
{
sum.push_back(add);
sum.push_back(1);
break;
}
num1.top() += 1;
sum.push_back(add);
}
else
{
add = num1.top();
num1.pop();
sum.push_back(add);
}
}
}
}
while (!sum.empty())
{
cout << sum.back();
sum.pop_back();
}
cout << endl;
}
int main()
{
//string str1 = "12321231231";
//string str2 = "234343434343";
string str1,str2;
cout << "请输入两个大数:" << endl;
cin >> str1;
cin >> str2;
BigNumberAdd(str1,str2);
return 0;
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |