Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <stack>
- #include <string>
- using namespace std;
- //Глобални променливи
- string number_1_string;
- string number_2_string;
- long number_1;
- long number_2;
- int result; //разликата на двете числа
- int multiplyBy = 1; //единици, стотици, хиляди... 523 => 3 * 1 + 20 * 10 + 5 * 100
- stack<int> number_1_stack;
- stack<int> number_2_stack;
- int prenos = 0;
- //Декларация на функции
- void fillStack(string number, stack<int> &number_stack);
- void main()
- {
- cout << "Num 1: ";
- cin >> number_1;
- number_1_string = to_string(number_1);
- cout << "Num 2: ";
- cin >> number_2;
- number_2_string = to_string(number_2);
- fillStack(number_1_string, number_1_stack);
- fillStack(number_2_string, number_2_stack);
- //запълване на двата стека с цифрите на двете числата
- int digit_1 = 0;
- int digit_2 = 0;
- int diffrence = 0; //разликата на две цифри
- //Кошмар
- //докато и двата стека не са празни
- while (!number_1_stack.empty() || !number_2_stack.empty())
- {
- if (number_1_stack.empty())
- {
- digit_1 = 0;
- }
- else
- {
- digit_1 = number_1_stack.top(); //взима последната цифра
- }
- if (number_2_stack.empty())
- {
- digit_2 = 0;
- }
- else
- {
- digit_2 = number_2_stack.top(); //взима последната цифра
- }
- if ((number_1 > 0 && number_2 < 0) || (number_1 < 0 && number_2 > 0)) { //123 + 456 или -123 -456
- int sum = digit_1 + digit_2 + prenos;
- if (sum > 0) {
- prenos = 1;
- sum -= 10;
- }
- else {
- prenos = 0;
- }
- result += sum * multiplyBy;
- }
- else //-123 + 456 или 123-456
- {
- int diffrence = abs(digit_1 - digit_2) + prenos;
- if (digit_1 < digit_2)
- {
- diffrence += 10;
- prenos = -1;
- }
- else {
- diffrence = digit_2 + 10 - digit_1 + prenos;
- prenos = -1;
- }
- result += diffrence * multiplyBy;
- }
- if (!number_1_stack.empty()) {
- number_1_stack.pop();
- }
- if (!number_2_stack.empty()) {
- number_2_stack.pop();
- }
- multiplyBy *= 10;
- }
- if (prenos == 1) //недовършена работа, Пример: 123 + 998
- {
- result += prenos * multiplyBy;
- }
- if (prenos == -1) //-1124 + 1200
- {
- result += prenos * multiplyBy;
- }
- if (number_1 < number_2) {
- result *= -1;
- }
- else {
- result = abs(result);
- }
- cout << "Substaction: " << result << endl;
- }
- void fillStack(string number_string, stack<int> &number_stack)
- {
- for (int i = 0; i < number_string.length(); i++) // за всеки символ (като всички са цифри с ASCII code)
- {
- if (number_string[i] != '-')
- {
- number_stack.push(number_string[i] - 48); //ASCII code: 2 има аски код '50', 50 - 48 = 2
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment