Найдите недостающую цифру в заданном произведении больших натуральных чисел
Даны два больших целых числа в виде строк A и B и их произведение также в виде строки C , такое что одна цифра произведения заменена на X , задача состоит в том, чтобы найти замененную цифру в произведении C.
Примеры:
Input: A = 51840, B = 273581, C = 1418243×040
Output: 9
Explanation:
The product of integer A and B is 51840 * 273581 = 14182439040. On comparing it with C, it can be concluded that the replaced digit was 9. Therefore, print 9.Input: A = 123456789, B = 987654321, C = 12193263111×635269
Output: 2
Наивный подход: самый простой подход к решению данной проблемы — найти произведение двух больших целых чисел A и B, используя подход, обсуждаемый в этой статье, а затем сравнить его с C, чтобы найти результирующую пропущенную цифру X.
Временная сложность: O((log 10 A)*(log 10 B))
Вспомогательное пространство: O (log 10 A + log 10 B)
Эффективный подход. Описанный выше подход также можно оптимизировать, используя следующие наблюдения:
Suppose N is an integer such that N = amam-1am-2 …….a2a1a0 where ax represents the xth digit. Now, N can be represented as:
=> N = am * 10m + am-1 * 10m-1 + ………… + a1 * 10 + a0Performing the modulo operation with 11 in the above equation:
=> N (mod 11) = am * 10m + am-1 * 10m-1 + ………… + a1 * 10 + a0 (mod 11)
=> N (mod 11) = am(-1)m + am-1(-1)m-1 + ……….. + a1(-1) + a0 (mod 11) [Since 10 ≡ -1 (mod 11)]
=> N (mod 11) = T (mod 11) where T = a0 – a1 + a2 …… + (-1)mam
Следовательно, из приведенного выше уравнения A * B = C можно преобразовать в (A % 11) * (B % 11) = (C % 11) , где левая часть уравнения представляет собой постоянное значение, а правая — стороны будет уравнение с 1 переменной X , которое можно решить, чтобы найти значение X . Может быть вероятность того, что X может иметь отрицательное значение после выполнения по модулю с 11 , для этого случая рассмотрим положительное значение X .
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O (log 10 A + log 10 B)
Вспомогательное пространство: O(1)