Advertisement
SomniP

Разложение на простые множите чисел сумма цифр коих 7

Nov 26th, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <ctime>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. int main()
  11. {
  12.     SetConsoleCP(1251);
  13.     SetConsoleOutputCP(1251);
  14.     srand(time(NULL));
  15.     system("color 0A");
  16.  
  17.     vector<short> box(1u + rand() % 10u);
  18.     auto filler = []()
  19.     {
  20.         return -1000 + rand() % (2001);
  21.     };
  22.     generate(box.begin(), box.end(), filler);
  23.     cout << "Исходная последовательность чисел" << endl;
  24.     for (const auto &value : box)
  25.     {
  26.         cout << value << endl;
  27.     }
  28.     cout << "Разложение чисел с суммой цифр кратной 7" << endl;
  29.     cout << endl;
  30.     auto flag2 = false;
  31.     auto flag3 = true;
  32.     auto flag4 = true;
  33.     for (auto &value : box)
  34.     {
  35.         string svalue = to_string(value);
  36.         size_t sum = 0u;
  37.         for (const auto &c : svalue)
  38.         {
  39.             sum += c == '-' ? 0u : c - '0';
  40.         }
  41.         if (!(sum % 7u))
  42.         {
  43.             flag2 = true;
  44.             auto flag = value > 0;
  45.             value = flag ? value : -value;
  46.             if (value == 0 || abs(value) == 1)
  47.             {
  48.                 cout << value << endl << endl;
  49.                 continue;
  50.             }
  51.             for (;;)
  52.             {
  53.                 if (flag3)
  54.                 {
  55.                     flag3 = false;
  56.                     cout << (flag ? value : -value);
  57.                     cout << " = ";
  58.                 }
  59.                 else
  60.                 {
  61.                     cout << " * ";
  62.                 }
  63.                 for (int u = 2u; u <= value; ++u)
  64.                 {
  65.                     if (!(value % u))
  66.                     {
  67.                         if (!flag && flag4)
  68.                         {
  69.                             flag4 = false;
  70.                             cout << -u;
  71.                         }
  72.                         else
  73.                         {
  74.                             cout << u;
  75.                         }
  76.                         value /= u;
  77.                         break;
  78.                     }
  79.                 }
  80.                 if (value == 1)
  81.                 {
  82.                     break;
  83.                 }
  84.             }
  85.             cout << endl;
  86.             cout << endl;
  87.         }
  88.         flag3 = true;
  89.         flag4 = true;
  90.     }
  91.     cout << (flag2 ? "" : "Таких чисел нет\n");
  92.  
  93.     system("pause");
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement