Число 113: для него прямой, обратный и дополнительный коды совпадают, так как оно положительное.
113(10)=01110001(2)
Число (-36):
Прямой код: 36(10)=00100100(2)
Обратный код (код, в котором меняем 0 на 1, а 1 на 0 в прямом коде):
-36(10) - обратный код 11011011(2)
Дополнительный код (к младшему разряду обратного кода прибавляем 1):
-36(10) - дополнительный код 11011100(2) - это число -36 в доп.коде
Сложим 113+(-36) в двоичных кодах:
01110001(2)+11011100(2)=1 0100 1101(2). Старшую единицу отбрасываем, получаем:
01001101(2)=77(10)
Проверим: 113-36=77 в десятичной с/с
#include <iostream>
#include <stack>
using namespace std;
void solve(string &s){
stack<char> cur;
for(int i = 0; i < s.size(); i++){
if(!cur.empty() && ((cur.top() == '(' && s[i] == ')') || (cur.top() == '{' && s[i] == '}') || (cur.top() == '[' && s[i] == ']')))
cur.pop();
else cur.push(s[i]);
}
if(cur.empty()) cout << "YES";
else cout << "NO";
signed main() {
string str;
cin >> str;
solve(str);
Число 113: для него прямой, обратный и дополнительный коды совпадают, так как оно положительное.
113(10)=01110001(2)
Число (-36):
Прямой код: 36(10)=00100100(2)
Обратный код (код, в котором меняем 0 на 1, а 1 на 0 в прямом коде):
-36(10) - обратный код 11011011(2)
Дополнительный код (к младшему разряду обратного кода прибавляем 1):
-36(10) - дополнительный код 11011100(2) - это число -36 в доп.коде
Сложим 113+(-36) в двоичных кодах:
01110001(2)+11011100(2)=1 0100 1101(2). Старшую единицу отбрасываем, получаем:
01001101(2)=77(10)
Проверим: 113-36=77 в десятичной с/с
#include <iostream>
#include <stack>
using namespace std;
void solve(string &s){
stack<char> cur;
for(int i = 0; i < s.size(); i++){
if(!cur.empty() && ((cur.top() == '(' && s[i] == ')') || (cur.top() == '{' && s[i] == '}') || (cur.top() == '[' && s[i] == ']')))
cur.pop();
else cur.push(s[i]);
}
if(cur.empty()) cout << "YES";
else cout << "NO";
}
signed main() {
string str;
cin >> str;
solve(str);
}