题目引用:http://116.56.140.75:8000/JudgeOnline/problem.php?id=1709
1709: 大整数的加减法
题目描述
在高精度运算的场合下,通常需要对超级巨大的整数进行运算。现在请你编程帮忙实现大整数的加法和减法运算。
输入
包含只有加减法的运算表达式。参与运算的整数及其中间结果的取值范围是(-10^10000000 , 10^10000000)。表达式的形式都是合乎逻辑的并且表达式中没有空格。如果第一个操作数为正数或0则没有符号,如果为负数则有负号。
输出
输出表达式的值。
样例输入
-11111111111111111111111+99999999999999999999999+22222222222222222222222
样例输出
111111111111111111111110
解析:这需要读取单个字符并存入数组里面进行运算
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int b[11000000] = {};
string str;
cin >> str;
int num = str.size();
int k = num - 1;
int count = 0;
int digit = 0;
int temp;
for (int i = num - 1; i >= 0; i--)
{
count = 0;
if (i != 0)
{
if (str[i] != '+'&&str[i] != '-')
continue;
if (str[i] == '+')
{
for (int j = k; j > i; j--)
b[count++] += (str[j] - '0');
k = i - 1;
}
else
{
for (int j = k; j > i; j--)
b[count++] -= (str[j] - '0');
k = i - 1;
}
}
else
{
if(str[i]=='-')
for (int j = k; j > i; j--)
b[count++] -= (str[j] - '0');
else
for (int j = k; j >= i; j--)
b[count++] += (str[j] - '0');
}
if (count > digit)
digit = count;
}
for (int i = 0; i < digit; i++)
{
if (b[i] >= 0)
{
temp = b[i] / 10;
b[i] -= (temp * 10);
b[i + 1] += temp;
}
if (b[i] < 0)
{
if (b[i] % 10 != 0)
temp = (-1)*b[i] / 10 + 1;
else
temp = (-1)*b[i] / 10;
b[i] += (temp * 10);
b[i + 1] -= temp;
}
}
for (int i = digit; i >= 0; i--)
{
if (i == 0)
{
cout << b[i];
break;
}
if (b[i] == 0)
continue;
else
{
if (b[i] > 0)
{
for (int j = i; j >= 0; j--)
cout << b[j];
}
else
{
if (b[i] + 1 != 0)
{
cout << b[i] + 1;
for (int j = i - 1; j >= 1; j--)
cout << 9 - b[j];
cout << 10 - b[0];
}
else
{
cout << "-";
for (int j = i - 1; j >= 1; j--)
cout << 9 - b[j];
cout << 10 - b[0];
}
}
break;
}
}
}
/**************************************************************
Problem: 1709
User: 201730685257
Language: C++
Result: 正确
Time:40 ms
Memory:44324 kb
****************************************************************/