EternalHaru

Сложение длинных чисел

May 31st, 2016
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<algorithm>
  4. #include<conio.h>
  5.  
  6. using namespace std;
  7.  
  8. struct Number {
  9.     vector<int> lnum;
  10. };
  11.  
  12.  
  13. //функция ввода числа, число должно вводить обычным способом, программа сама его "отзеркалит"
  14. void number_input(Number *n)
  15. {
  16.     bool y = true;
  17.     bool z = true;
  18.     int i = 0;
  19.     int q = 0;
  20.     while (y)
  21.     {
  22.         q = _getche();
  23.         if (((q > '9') || (q < '0')) && (q != 13))
  24.         {
  25.             cout << "Ошибка ввода!\n";
  26.             n->lnum.clear();
  27.         }
  28.         else if (q != 13)
  29.         {
  30.             n->lnum.push_back(q - 48);
  31.         }
  32.         else if (q == 13)
  33.         {
  34.             system("cls");
  35.             y = false;
  36.         }
  37.     }
  38.     reverse(n->lnum.begin(), n->lnum.end());
  39. }
  40.  
  41.  
  42. //функция вывода числа в правильном порядке цифр
  43. void number_print(Number n)
  44. {
  45.     for (int i = (n.lnum.size()) - 1; i >= 0; i--)
  46.     {
  47.         cout << n.lnum[i];
  48.     }
  49. }
  50.  
  51. //функция сложения длинных чисел
  52. Number add(Number a, Number b) {
  53.     int carry = 0;
  54.     for (size_t i = 0; i < max(a.lnum.size(), b.lnum.size()) || carry; ++i) {
  55.         if (i == a.lnum.size())
  56.             a.lnum.push_back(0);
  57.         a.lnum[i] += carry + (i < b.lnum.size() ? b.lnum[i] : 0);
  58.         carry = a.lnum[i] >= 10;
  59.         if (carry)  a.lnum[i] -= 10;
  60.     }
  61.     return a;
  62. }
  63.  
  64. int main() {
  65.     setlocale(0, "rus");
  66.     Number a;
  67.     Number b;
  68.     cout << "Введите первый операнд: ";
  69.     number_input(&a);
  70.     cout << "Введите второй операнд: ";
  71.     number_input(&b);
  72.     cout << "\nРезультат сложения: ";
  73.     number_print(add(a, b));
  74.     cout << "\n";
  75.     system("pause");
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment