Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
Достаточно интересная задачка на произведение двух длинных чисел.Вроде бы алгоритм придумал и уже даже написал,но в коде есть косяки природы которых мне не ясна.Может кто знает в чем косяки?Не судите строго,знаю что выглядит не очень. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. Модератор: Отформатировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 02:47 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
ванмомас намбаван, Начните с нормального форматирования кода. С таким вырвиглазным форматированием не мудрено пропустить какую-то важную скобку или типа того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 06:27 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
ванмомас намбаван, Что это за хрень ? Код: plaintext 1. 2. Ты всё время применяешь этот трюк. Шваркнуть в буфер строки 10 миллионов байт, и потом не иметь проблем с доступом к памяти, потому что памяти дофига -- не большая заслуга. Ты научить нормально с памятью работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 10:33 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
Ну я это решил как организовать.Сначала считаем произведение первого числа с единицами второго.Потом мы прибавляем к концу произведения(sum) нужное кол-во нулей(по правилам умножения в столбик смещаем),когда мы считаем единицы ,например,то это кол-во равно нулю.потом мы прибавляем это к сумме прошлых произведений(suml) ,когда мы считали единицы то это был первый раз и соответственно в сумме прошлых произведений ноль.Потом мы присваиваем то что у нас в сумме(q) вышло сумме прошлых произведений(suml=q) и делаем пустой строку текущего произведения(sum).Дальше мы идем по циклу опять только теперь мы умножаем перовое число уже на десятки второго и так далее в цикле.У меня ошибка вот тут(код ниже),говорит string subscript out of range.Это уже при умножении на 10ки после того как я сделал строку пустой sum="".там выходит sum=char(k+48) и когда у нас k=2(при умножении единиц первого числа 12ти на дестяки второго числа тоже 12ти) то оно записывает в sum 2024 0_о ,откуда оно его берет - загадка(может не правильно сделал sum пустой).А когда мы умножаем десятки первого на десятки второго и k=1,то оно пишет ошибку string subscript out of range.Вот собственно код где оно вылетает(я отметил комментарием это место): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Модератор: Отформатировано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2015, 14:52 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
ванмомас намбаван, ничего интересного в ней нет. Интересно найти оптимальную реализацию, и обоснование. Лично я не нашёл. Не конкретно методы для реализации длинной арифметики, а именно решить вопросы касаемо того, как лучше это реализовать, а не как вообще реализовать. Вы пишите "выглядит не очень" ? Что значит выглядит не очень ? Код не отформатирован. Не удобно разбираться в нем. Не не очень, а плохо выглядит этот код, хотя бы из-за форматирования. Вам Анатолий написал, а вы до сих пор не исправили. Не думаю что кто-то из тех кто может вам помочь специально отформатирует код за вас, и будет проверять. Вообщем ждем нормальный текст программы. Вам yard нужен только для того чтобы сделать реверс строки ? Исправьте, и не нагружайте код побочной ерундой. Реверс можно сделать проще, и оптимальней. авторНу я это решил как организовать.Сначала считаем произведение первого числа с единицами второго каким единицами ? У чисел разряды есть. А ещё есть числа, и цифры. авторПотом мы прибавляем к концу произведения(sum) нужное кол-во нулей(по правилам умножения в столбик смещаем), сдвигаете вы просто, зачем писать 20 слов чтобы это сказать ? авторкогда мы считаем единицы ,например,то это кол-во равно нулю.потом мы прибавляем это к сумме прошлых произведений(suml) ,когда мы считали единицы то это был первый раз и соответственно в сумме прошлых произведений ноль.Потом мы присваиваем то что у нас в сумме(q) вышло сумме прошлых произведений(suml=q) и делаем пустой строку текущего произведения(sum).Дальше мы идем по циклу опять только теперь мы умножаем перовое число уже на десятки второго и так далее в цикле. Переходим к следующей итерации. "Идём по циклу" больше ассоциируется с тем? что вы идёте внутри цикла далее, нежели то, что вы скорее всего имеете ввиду. То что вы написали дальше, я уже не хочу разбирать. Вообщем потрудитесь уважать тех у кого просите советы. Вы учитесь программированию, а не советы у наркоманов просите. Это конструктивные (и полезные для вас) замечания, а не просто критика. И пожалуйста обратите на них внимание. Ибо после совета Анатолия, вы снова привели ниже неотформатированный код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 20:35 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
SashaMercury,а как вы представляете себе отформатированный код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 22:34 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
Вот переделал полностью. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 22:35 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
ванмомас намбаванВот переделал полностью. А тебе известно, что разрядность произведения двух чисел равна сумме разрядностей множителей?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 22:52 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
Несколько совершенно машинальных рефакторингов. Каждый день так делаю. Не тестил. Тестируй сам козаче. Особое thnks Дмитрию за замечание по разрядности результата. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 23:10 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
mayton,спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 23:42 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
mayton// TODO: Is it correct? MAXSZ? Or MAXSZ * 2 ? (Thnk's to Dimitry Sibiryakov) Точная формула максимально возможного произведения будет (10 x+1 -1)*(10 y+1 -1), что раскладывается в 10 x+y+2 -10 x -10 y +1, что ограничивает его разрядность сверху числом x+y+1. То есть при обозначенной в сабже максимальной разрядности обеих множителей в 250, результат может иметь максимум 501 цифру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 23:43 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
Тут интересно пишут. Об оценке сложности умножения. https://ru.wikipedia.org/wiki/Умножение_Карацубы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.01.2015, 23:57 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovпри обозначенной в сабже максимальной разрядности обеих множителей в 250, результат может иметь максимум 501 цифру. А, блин, математик из меня как из дерьма пуля. 500 цифр максимум, без вариантов. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2015, 00:10 |
|
||
|
Длинная арифметика.Произведение двух очень длинных чисел.Длина до 10^250.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovDimitry Sibiryakovпри обозначенной в сабже максимальной разрядности обеих множителей в 250, результат может иметь максимум 501 цифру. А, блин, математик из меня как из дерьма пуля. 500 цифр максимум, без вариантов. Ну как бы это всё в документации к любой СУБД написано, numeric/decimal все почти поддерживают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.01.2015, 10:49 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38849914&tid=2019153]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 146ms |

| 0 / 0 |
