问题遇到的现象和发生背景
大数加减法运算中如何实现负数的加减法;以及为什么交换数据输入后,会报错,还有两个数相减时不会输出结果
问题相关代码,请勿粘贴截图
#include
#include<string.h>
#include
#include
#include
using namespace std;
void operation(string a,char oper, string b)
{
vectorstr1;//定义动态数组
vectorstr2;
vectorsum; //定义结果数组
for (int i = a.length() - 1; i >= 0; i--)//将输入的字符串传入动态数组中
{
str1.push_back(a[i] - '0'); //将字符型转化为int型
}
for (int i = b.length() - 1; i >= 0; i--)
{
str2.push_back(b[i] - '0');
}
switch (oper)
{
int flag = 0;//变量
int i = 0;
case'+':
for (; i < str1.size() && str2.size(); i++)
{
sum.push_back((str1[i] + str2[i] + flag) % 10);
flag = (str1[i] + str2[i] + flag) / 10;
}
if (str1.size() >= str2.size())
{
- for (; i < str1.size(); i++)
- {
- sum.push_back((str1[i] + flag) % 10);
- flag = (str1[i] + flag) / 10;
- }
- }
- else
- {
- for (; i < str2.size(); i++)
- {
- sum.push_back((str2[i] + flag) % 10);
- flag = (str2[i] + flag) / 10;
- }
- }
- sum.push_back(flag); //逢十进一
- reverse(sum.begin(), sum.end());//将数组逆置
- if (sum[0] != 0) //判断第一个数据是否为零
- {
- for (int i = 0; i < sum.size(); i++)
- {
- cout << sum[i];
- }
- }
- else
- {
- for (int i = 1; i < sum.size(); i++)
- {
- cout << sum[i];
- }
- }
- break;
-
- case'-':
-
- if (str1.size() >= str2.size())
- {
- for (; i < str2.size(); i++)
- {
- if (str1[i] >= str2[i])
- {
- sum.push_back((str1[i] - str2[i] - flag)%10);
- flag = (str1[i] - str2[i] - flag)/10;
- }
- else
- {
- sum.push_back((str1[i] + 10 - str2[i] - flag) % 10);
- flag = (str1[i] + 10 - str2[i] - flag) / 10;
- }
- }
- for (; i < str1.size(); i++)
- {
- if (str1[i] >= 1)
- {
- sum.push_back((str1[i] - flag)%10);
- flag = (str1[i] - flag)/10;
- }
- else
- {
- sum.push_back((str1[i] + 10 - flag) % 10);
- flag = (str1[i] + 10 - flag) / 10;
- }
- }
- reverse(sum.begin(), sum.end());
- if (sum[0] != 0) //判断第一个数据是否为零
- {
- for (int i = 0; i < sum.size(); i++)
- {
- cout << sum[i];
- }
- }
- else
- {
- for (int i = 1; i < sum.size(); i++)
- {
- cout << sum[i];
- }
- }
-
- }
- else
- {
- for (; i < str1.size(); i++)
- {
- if (str2[i] >= str1[i])
- {
- sum.push_back((str2[i] - str1[i] - flag) % 10);
- flag = (str2[i] - str1[i] - flag) / 10;
- }
- else
- {
- sum.push_back((str2[i] + 10 - str1[i] - flag) % 10);
- flag = (str2[i] + 10 - str1[i] - flag) / 10;
- }
- }
- for (; i < str2.size(); i++)
- {
- if (str2[i] >= 1)
- {
- sum.push_back((str2[i] - flag) % 10);
- flag = (str2[i] - flag) / 10;
- }
- else
- {
- sum.push_back((str2[i] + 10 - flag) % 10);
- flag = (str1[i] + 10 - flag) / 10;
- }
- sum.push_back('-');
- }
- reverse(sum.begin(), sum.end());
- if (sum[0] != 0) //判断第一个数据是否为零
- {
- for (int i = 0; i < sum.size(); i++)
- {
- cout << sum[i];
- }
- }
- else
- {
- for (int i = 1; i < sum.size(); i++)
- {
- cout << sum[i];
- }
- }
- }
-
- break;
- }
}
int main()
{
string str1;
string str2;
char oper;
cout << "请输入:" << endl;
cin >> str1 >>oper >> str2;
operation(str1,oper,str2);
system("pause");
return 0;
}
运行结果及报错内容
当输入1+999999时会正确输出结果,当输入9999999+1,程序会出错
以及输入两个数相减时不会输出结果
还有无法进行输入数字为负数的情况
我的解答思路和尝试过的方法
我想要达到的结果
能够正确的运行大数运算,包括含有负数的情况