Advertisement
fulou

ауе

Mar 27th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.02 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <locale>
  3. #include <iostream>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. vector<bool> Sum(vector<bool> num1, vector<bool> num2)
  9. {
  10.     vector<bool> res(num1.size() + 1);
  11.     int i = num1.size()-1;
  12.     bool transfer = false;
  13.     while (i > -1)
  14.     {
  15.         if ((num1[i] && num2[i] == false) || (num2[i] && num1[i] == false))
  16.         {
  17.             if (transfer)
  18.                 res[i+1] = false;
  19.             else
  20.             {
  21.                 res[i+1] = true;
  22.             }
  23.            
  24.         }
  25.         else if (num1[i] == false && num2[i] == false)
  26.             if (transfer) {
  27.                 res[i + 1] = true;
  28.                 transfer = false;
  29.             }
  30.             else res[i + 1] = false;
  31.         else
  32.         {
  33.             if (transfer)
  34.                 res[i + 1] = true;
  35.             else {
  36.                 res[i + 1] = false;
  37.                 transfer = true;
  38.             }
  39.         }
  40.         i--;
  41.     }
  42.     if (transfer)
  43.         res[0] = true;
  44.     return res;
  45. }
  46.  
  47. vector<bool> Mult(vector<bool> num1, vector<bool> num2)
  48. {
  49.     vector<bool> res(num1.size() + num2.size());
  50.     for (int i = num2.size() - 1; i >= 0; i--)
  51.     {
  52.         vector<bool> temp(num1.size() + num1.size() - i +1);
  53.         int k = temp.size() - num1.size() + i;
  54.         for (int j = num1.size() - 1; j >= 0; j--, k--)
  55.         {
  56.             if (num2[i] && num1[j])
  57.                 temp[k] = true;
  58.             else temp[k] = false;
  59.         }
  60.         res = Sum(temp, res);
  61.     }
  62.     return res;
  63. }
  64.  
  65.  
  66. //int intNum1 = 0, intNum2 = 0;
  67. //for (int i = 0; i < num1.size(); i++)
  68. //{
  69. //  if (num1[num1.size() - 1 - i])
  70. //      intNum1 += pow(2, i);
  71. //}
  72. //for (int i = 0; i < num2.size(); i++)
  73. //{
  74. //  if (num2[num2.size() - 1 - i])
  75. //      intNum2 += pow(2, i);
  76. //}
  77. //int mul = intNum1*intNum2;
  78. //vector<bool> res(num1.size() + num2.size());
  79. //int i = res.size() - 1;
  80. //string result;
  81. //do
  82. //{
  83. //  if (mul % 2 == 1)
  84. //  {
  85. //      res[i] = true;
  86. //  }
  87. //  else
  88. //      res[i] = false;
  89. //  mul /= 2;
  90. //  i--;
  91. //} while (mul > 0);
  92.  
  93. int main()
  94. {
  95.     setlocale(LC_ALL, "Russian");
  96.     cout << "Программа выполняет сложение и умножение чисел в двоичной системе счисления." << endl;
  97.     cout << "Григорьева М.В. группа 2103" << endl;
  98.     system("pause");
  99.     system("cls");
  100.     cout << "Введите первое число, начиная со старшего бита" << endl;
  101.     string num1, num2;
  102.     bool n = true;
  103.     do {
  104.         cin >> num1;
  105.         for (int i = 0; i != num1.length(); ++i)
  106.         {
  107.             if (num1[i] != '1' && num1[i] != '0')
  108.             {
  109.                 cout << "Двоичное представление числа должно содержать только 0 и 1, введите заного!" << endl;
  110.                 break;
  111.             }
  112.             else
  113.                 n = false;
  114.         }
  115.     } while (n);
  116.     system("cls");
  117.     cout << "Введите второе число, начиная со старшего бита" << endl;
  118.     n = true;
  119.     do {
  120.         cin >> num2;
  121.         for (int i = 0; i != num2.length(); ++i)
  122.         {
  123.             if (num2[i] != '1' && num2[i] != '0')
  124.             {
  125.                 cout << "Двоичное представление числа должно содержать только 0 и 1, введите заного!" << endl;
  126.                 break;
  127.             }
  128.             else
  129.                 n = false;
  130.         }
  131.     } while (n);
  132.     int vectorLenght;
  133.     if (num1.length() > num2.length())
  134.         vectorLenght = num1.length();
  135.     else vectorLenght = num2.length();
  136.  
  137.     vector<bool> vectorNum1(vectorLenght);
  138.     vector<bool> vectorNum2(vectorLenght);
  139.     int i = num1.length()-1;
  140.     int j = vectorNum1.size()-1;
  141.     while (i > -1)
  142.     {
  143.         if (num1[i] == '1')
  144.             vectorNum1[j] = true;
  145.         else vectorNum1[j] = false;
  146.         i--;
  147.         j--;
  148.     }
  149.     i = num2.length() - 1;
  150.     j = vectorNum2.size() - 1;
  151.     while (i > -1)
  152.     {
  153.         if (num2[i] == '1')
  154.             vectorNum2[j] = true;
  155.         else vectorNum2[j] = false;
  156.         i--;
  157.         j--;
  158.     }
  159.  
  160.     vector<bool> sum = Sum(vectorNum1, vectorNum2);
  161.     vector<bool> mult = Mult(vectorNum1, vectorNum2);
  162.  
  163.     cout << "Сумма чисел: " << endl;
  164.     for (int i = 0; i < sum.size(); i++)
  165.     {
  166.         if (sum[i])
  167.             cout << '1' << " ";
  168.         else
  169.             cout << '0' << " ";
  170.     }
  171.     cout << endl;
  172.     cout << "Произведение чисел: " << endl;
  173.     for (int i = 0; i < mult.size(); i++)
  174.     {
  175.         if (mult[i])
  176.             cout << '1' << " ";
  177.         else
  178.             cout << '0' << " ";
  179.     }
  180.     cout << endl;
  181.     system("pause");
  182.     return 0;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement