Advertisement
nblknn

Щ++

Oct 16th, 2023
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.50 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. const int MIN = 0;
  5. const int MAX = 9;
  6. const int MINNUM = 1;
  7. const int MAXNUM = 1000000;
  8.  
  9. void writeCondition()
  10. {
  11.     cout << "Данная программа складывает два числа столбиком." << endl;
  12.     cout << "Условие ввода чисел: числа целые, от 1 до 1000000." << endl;
  13. }
  14.  
  15. int inputNum(int number, int num)
  16. {
  17.     bool isIncorrect;
  18.     do {
  19.         isIncorrect = false;
  20.         cout << "Введите " << number << " число: ";
  21.         cin >> num;
  22.         if (cin.get() != '\n') {
  23.             cin.clear();
  24.             while (cin.get() != '\n');
  25.             isIncorrect = true;
  26.             cout << "Введенные данные не соответствуют условию. Повторите попытку." << endl;
  27.         }
  28.         if (!isIncorrect && (num < MINNUM || num > MAXNUM)) {
  29.             isIncorrect = true;
  30.             cout << "Введенные данные не соответствуют условию. Повторите попытку." << endl;
  31.         }
  32.     } while (isIncorrect);
  33.     return num;
  34. }
  35.  
  36. int findNumSize(int num, int size)
  37. {
  38.     size = 0;
  39.     while (num > MIN)
  40.     {
  41.         size++;
  42.         num /= 10;
  43.     }
  44.     return size;
  45. }
  46.  
  47. int* convertToArray(int num, int size)
  48. {
  49.     int ten = 10;
  50.     int* numArr = new int[size];
  51.     for (int i = size - 1; i > -1; i--)
  52.     {
  53.         numArr[i] = ((num % ten) / (ten / 10));
  54.         ten *= 10;
  55.     }
  56.     return numArr;
  57. }
  58.  
  59. int findSumSize(int sumSize, int fstSize, int secSize)
  60. {
  61.     if (fstSize > secSize)
  62.         sumSize = fstSize;
  63.     else
  64.         sumSize = secSize;
  65.     return sumSize;
  66. }
  67.  
  68.  
  69. int* findSum(int biggerSize, int smallerSize, int sumSize, int* biggerNum, int* smallerNum)
  70. {
  71.     int* sum = new int[sumSize];
  72.     for (int i = (sumSize - 1); i > -1; i--)
  73.         if (i > (biggerSize - smallerSize - 1))
  74.             sum[i] = biggerNum[i] + smallerNum[i - (biggerSize - smallerSize)];
  75.         else
  76.             sum[i] = biggerNum[i];
  77.     return sum;
  78. }
  79.  
  80. int* findSumCondition(int fstSize, int secSize, int sumSize, int* fstNumArr, int* secNumArr) // кринж название?(((
  81. {
  82.     if (fstSize > secSize)
  83.     {
  84.         int* sum = findSum(fstSize, secSize, sumSize, fstNumArr, secNumArr);
  85.         return sum;
  86.     }
  87.     else
  88.     {
  89.         int* sum = findSum(secSize, fstSize, sumSize, secNumArr, fstNumArr);
  90.         return sum;
  91.     }
  92. }
  93.  
  94. int* addOnes(int sumSize, int* sum)
  95. {
  96.     int one = 0;
  97.     for (int i = (sumSize - 1); i > 0; i--)
  98.     {
  99.         sum[i] += one;
  100.         if (sum[i] > MAX)
  101.         {
  102.             one = 1;
  103.             sum[i] -= 10;
  104.         }
  105.         else
  106.             one = 0;
  107.     }
  108.     sum[0] += one;
  109.     return sum;
  110. }
  111.  
  112. int* addPosition(int sumSize, int* sum)
  113. {
  114.     if (sum[0] > MAX)
  115.     {
  116.         int* sumNew = new int[sumSize];
  117.         for (int i = (sumSize - 1); i > -1; i--)
  118.             sumNew[i + 1] = sum[i];
  119.         sumNew[1] = sum[0] - 10;
  120.         sumNew[0] = 1;
  121.         delete[] sum;
  122.         return sumNew;
  123.     }
  124.     else return sum;
  125. }
  126.  
  127. void outputArray(int size, int* arr)
  128. {
  129.     int i = 0;
  130.     for (i = 0; i < size; i++)
  131.         cout << arr[i];
  132.     cout << endl;
  133. }
  134.  
  135. void outputSum(int fstSize, int secSize, int sumSize, int* fstNumArr, int* secNumArr, int* sum)
  136. {
  137.     int i = 0;
  138.     cout << "Результат: " << endl;
  139.     for (i = 0; i < (sumSize - fstSize + 1); i++)
  140.         cout << " ";
  141.     outputArray(fstSize, fstNumArr);
  142.     cout << "+" << endl;
  143.     for (i = 0; i < (sumSize - secSize + 1); i++)
  144.         cout << " ";
  145.     outputArray(secSize, secNumArr);
  146.     cout << "-------" << endl;
  147.     cout << " ";
  148.     outputArray(sumSize, sum);
  149. }
  150.  
  151.  
  152.  
  153. int main()
  154. {
  155.     setlocale(LC_ALL, "Russian");
  156.     int fstNum = 0;
  157.     int secNum = 0;
  158.     int fstSize = 0;
  159.     int secSize = 0;
  160.     int sumSize = 0;
  161.     writeCondition();
  162.     fstNum = inputNum(1, fstNum);
  163.     secNum = inputNum(2, secNum);
  164.     fstSize = findNumSize(fstNum, fstSize);
  165.     secSize = findNumSize(secNum, secSize);
  166.     int* fstNumArr = convertToArray(fstNum, fstSize);
  167.     int* secNumArr = convertToArray(secNum, secSize);
  168.     sumSize = findSumSize(sumSize, fstSize, secSize);
  169.     int* sum = findSumCondition(fstSize, secSize, sumSize, fstNumArr, secNumArr);
  170.     sum = addOnes(sumSize, sum);
  171.     if (sum[0] > MAX)
  172.         sumSize++;
  173.     sum = addPosition(sumSize, sum);
  174.     outputSum(fstSize, secSize, sumSize, fstNumArr, secNumArr, sum);
  175.     return 0;
  176.  
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement