Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include<string>
- using namespace std;
- char data_in(const int max_size, int* arr) {
- string s;
- cin >> s;
- char sign = '+';
- int i = 0;
- int len;
- len = s.length();
- if (s[0] == '-') {
- s.erase(0, 1);
- len--;
- sign = '-';
- }
- for (int i = 0; i < max_size; ++i)
- arr[i] = 0;
- for (i; i < len; i++)
- arr[len - i] = int(s[i]) - 48;
- return sign;
- }
- void data_out(const int max_size, int* arr, char sign) {
- int i = max_size - 1, sum = 0;
- while (arr[i] == 0 && i >= 0) i--;
- if (i == -1) {
- cout << 0;
- return;
- }
- if (sign == '-') {
- cout << '-';
- for (int j = i; j >= 1; j--)
- cout << arr[j];
- }
- else {
- for (int j = i; j >= 1; j--)
- cout << arr[j];
- }
- }
- int what_is_bigger(const int max_size, int* arr1, int* arr2) {
- int i, num_max = 1;
- for (i = max_size; i >= 0; i--) {
- if (((arr1[i] != 0) || (arr2[i] != 0)) && (arr1[i] > arr2[i])) {
- num_max = 1;
- break;
- }
- if (((arr1[i] != 0) || (arr2[i] != 0)) && (arr1[i] < arr2[i])) {
- num_max = 2;
- break;
- }
- }
- return num_max;
- }
- void long_plus(const int max_size, int* arr1, int* arr2) {
- int c = 0;
- for (int i = 1; i < max_size; ++i) {
- c = c + arr1[i] + arr2[i];
- arr1[i] = c % 10;
- c /= 10;
- }
- }
- void long_minus(const int max_size, int* arr1, int* arr2) {
- int i, c = 0;
- for (i = 0; i < max_size; i++) {
- arr1[i] = arr1[i] - arr2[i] + c;
- c = 0;
- if (arr1[i] < 0) {
- arr1[i] += 10;
- c--;
- }
- }
- }
- void operation_def(const int max_size, int* arr1, int* arr2, char signa, char signb, char operation) {
- char sign = '+';
- int num_max;
- num_max = what_is_bigger(max_size, arr1, arr2);
- if (operation == '+') {
- if (signa == signb) {
- long_plus(max_size, arr1, arr2);
- if (signa == '+') sign = '+';
- if (signa == '-') sign = '-';
- data_out(max_size, arr1, sign);
- }
- else {
- if (signa == '+') {
- if (num_max == 1) {
- sign = '+';
- long_minus(max_size, arr1, arr2);
- data_out(max_size, arr1, sign);
- }
- else {
- sign = '-';
- long_minus(max_size, arr2, arr1);
- data_out(max_size, arr2, sign);
- }
- }
- else {
- if (num_max == 1) {
- sign = '-';
- long_minus(max_size, arr1, arr2);
- data_out(max_size, arr1, sign);
- }
- else {
- sign = '+';
- long_minus(max_size, arr2, arr1);
- data_out(max_size, arr2, sign);
- }
- }
- }
- }
- if (operation == '-') {
- if (signa == signb) {
- if (signa == '+') {
- if (num_max == 1) {
- sign = '+';
- long_minus(max_size, arr1, arr2);
- data_out(max_size, arr1, sign);
- }
- else {
- sign = '-';
- long_minus(max_size, arr2, arr1);
- data_out(max_size, arr2, sign);
- }
- }
- else {
- if (num_max == 1) {
- sign = '-';
- long_minus(max_size, arr1, arr2);
- data_out(max_size, arr1, sign);
- }
- else {
- sign = '+';
- long_minus(max_size, arr2, arr1);
- data_out(max_size, arr2, sign);
- }
- }
- }
- else {
- long_plus(max_size, arr1, arr2);
- if (signa == '+') sign = '+';
- if (signa == '-') sign = '-';
- data_out(max_size, arr1, sign);
- }
- }
- }
- int main()
- {
- const int max_size = 100000;
- char operation;
- char signa = '+', signb = '+';
- int i = 0, sum = 0;
- int* a = new int[max_size];
- int* b = new int[max_size];
- signa = data_in(max_size, a);
- cin >> operation;
- signb = data_in(max_size, b);
- operation_def(max_size, a, b, signa, signb, operation);
- delete a;
- delete b;
- }
Add Comment
Please, Sign In to add comment