Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <locale>
- #include <iostream>
- #include <vector>
- using namespace std;
- vector<bool> Sum(vector<bool> num1, vector<bool> num2)
- {
- vector<bool> res(num1.size() + 1);
- int i = num1.size()-1;
- bool transfer = false;
- while (i > -1)
- {
- if ((num1[i] && num2[i] == false) || (num2[i] && num1[i] == false))
- {
- if (transfer)
- res[i+1] = false;
- else
- {
- res[i+1] = true;
- }
- }
- else if (num1[i] == false && num2[i] == false)
- if (transfer) {
- res[i + 1] = true;
- transfer = false;
- }
- else res[i + 1] = false;
- else
- {
- if (transfer)
- res[i + 1] = true;
- else {
- res[i + 1] = false;
- transfer = true;
- }
- }
- i--;
- }
- if (transfer)
- res[0] = true;
- return res;
- }
- vector<bool> Mult(vector<bool> num1, vector<bool> num2)
- {
- vector<bool> res(num1.size() + num2.size());
- for (int i = num2.size() - 1; i >= 0; i--)
- {
- vector<bool> temp(num1.size() + num1.size() - i +1);
- int k = temp.size() - num1.size() + i;
- for (int j = num1.size() - 1; j >= 0; j--, k--)
- {
- if (num2[i] && num1[j])
- temp[k] = true;
- else temp[k] = false;
- }
- res = Sum(temp, res);
- }
- return res;
- }
- //int intNum1 = 0, intNum2 = 0;
- //for (int i = 0; i < num1.size(); i++)
- //{
- // if (num1[num1.size() - 1 - i])
- // intNum1 += pow(2, i);
- //}
- //for (int i = 0; i < num2.size(); i++)
- //{
- // if (num2[num2.size() - 1 - i])
- // intNum2 += pow(2, i);
- //}
- //int mul = intNum1*intNum2;
- //vector<bool> res(num1.size() + num2.size());
- //int i = res.size() - 1;
- //string result;
- //do
- //{
- // if (mul % 2 == 1)
- // {
- // res[i] = true;
- // }
- // else
- // res[i] = false;
- // mul /= 2;
- // i--;
- //} while (mul > 0);
- int main()
- {
- setlocale(LC_ALL, "Russian");
- cout << "Программа выполняет сложение и умножение чисел в двоичной системе счисления." << endl;
- cout << "Григорьева М.В. группа 2103" << endl;
- system("pause");
- system("cls");
- cout << "Введите первое число, начиная со старшего бита" << endl;
- string num1, num2;
- bool n = true;
- do {
- cin >> num1;
- for (int i = 0; i != num1.length(); ++i)
- {
- if (num1[i] != '1' && num1[i] != '0')
- {
- cout << "Двоичное представление числа должно содержать только 0 и 1, введите заного!" << endl;
- break;
- }
- else
- n = false;
- }
- } while (n);
- system("cls");
- cout << "Введите второе число, начиная со старшего бита" << endl;
- n = true;
- do {
- cin >> num2;
- for (int i = 0; i != num2.length(); ++i)
- {
- if (num2[i] != '1' && num2[i] != '0')
- {
- cout << "Двоичное представление числа должно содержать только 0 и 1, введите заного!" << endl;
- break;
- }
- else
- n = false;
- }
- } while (n);
- int vectorLenght;
- if (num1.length() > num2.length())
- vectorLenght = num1.length();
- else vectorLenght = num2.length();
- vector<bool> vectorNum1(vectorLenght);
- vector<bool> vectorNum2(vectorLenght);
- int i = num1.length()-1;
- int j = vectorNum1.size()-1;
- while (i > -1)
- {
- if (num1[i] == '1')
- vectorNum1[j] = true;
- else vectorNum1[j] = false;
- i--;
- j--;
- }
- i = num2.length() - 1;
- j = vectorNum2.size() - 1;
- while (i > -1)
- {
- if (num2[i] == '1')
- vectorNum2[j] = true;
- else vectorNum2[j] = false;
- i--;
- j--;
- }
- vector<bool> sum = Sum(vectorNum1, vectorNum2);
- vector<bool> mult = Mult(vectorNum1, vectorNum2);
- cout << "Сумма чисел: " << endl;
- for (int i = 0; i < sum.size(); i++)
- {
- if (sum[i])
- cout << '1' << " ";
- else
- cout << '0' << " ";
- }
- cout << endl;
- cout << "Произведение чисел: " << endl;
- for (int i = 0; i < mult.size(); i++)
- {
- if (mult[i])
- cout << '1' << " ";
- else
- cout << '0' << " ";
- }
- cout << endl;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement