Вы можете определенно разделить это на множество частей.Например, возьмите эти два числа:
12345
+ 67890
Теперь мы разделим их после третьей цифры между сотнями и десятками столбцов.Это дает нам
123 45
+ 678 + 90
Рассчитать результаты каждого
123 45
+ 678 + 90
-------------
801 135
В левом наборе чисел вам нужно знать, сколько цифр вы отрубили, в данном случае две цифры, поэтомудобавьте два нуля обратно в конец 801, что даст вам 80100. И прибавьте 135 к нему, и у вас будет 80235.
Вы можете сделать это с гораздо большими числами и таким количеством разбиений, сколько захотите.Использование этого метода предотвращает возникновение переноса.
Конечно, когда вы рекомбинируете большие числа, у вас все еще остаются большие добавления.Вы могли бы, вероятно, выяснить, сколько цифр было в руках, и просто добавить это небольшое количество к своему левому номеру.
Например, в нашем примере выше наш номер справа в конечном итоге перешел от 2 столбцов к3 столбца, с результатом 135. Таким образом, дополнительный столбец - это число, которое нужно перенести, которое может быть добавлено к вашему 801. Это позволяет вам добавить к небольшому числу, а затем просто объединить два числа, как если бы вы были строкой
45 и 90 оба заняли два столбца, в результате чего было получено 135. Мы берем любые сгенерированные дополнительные столбцы, в данном случае только 1, и добавляем их к нашему левому числу 801.
801 + 1 = 802
802 concatenated with 35 = 80235
Если вы хотите что-то чрезвычайно эффективное, я уверен, вы могли бы посмотреть, как 32-разрядные процессоры добавляют 64-разрядные или более крупные числа.Я уверен, что они делают нечто подобное для 64-разрядных чисел, добавляя два 32-разрядных раздела и перенося их из наименее значимого 32-разрядного в наиболее значимый.
И с точки зрения распараллеливания, разбиениесложите свое число в 32-битные пары, которые нужно сложить вместе, затем определите, сколько доступных потоков процессор может обработать за один раз, разделите список пар на столько и дайте столько же каждому потоку.Когда результаты вычислены, поместите их в законченный раздел.
Хитрость переноса чисел от наименее значимого к наиболее значимому, как только вы получите все результаты обратно, будет непростой задачей, так как добавление даже одного 1Значение числа может привести к тому, что оно переместится и на другое число.