Как я могу умножить два 64-значных десятичных числа на C# без переполнения?Умножение двух 64-значных чисел
ответ
Если вам нужно 64 десятичных значных чисел, и если они являются целыми числами, вы можете использовать System.Numerics.BigInteger
-структуру (необходима ссылка на System.Numerics.dll
сборки).
BigInteger firstNumber = BigInteger.Parse("63518439492097324687235465876298368764576527346564625480");
BigInteger secondNumber = BigInteger.Parse("84890247648975285765484902890273086475254764765147643611");
BigInteger product = firstNumber * secondNumber;
Ницца. Класс, который, как я предполагаю, реализует то, что я собираюсь предложить (разбивая номер на управляемые числа и делая умножение по частям) – Joe
@Joe Да, это как бы разбивает его на 8-битные числа без знака. Они хранятся в массиве типа 'byte []'. Я не знаю, сколько процессорных умножений требуется для заданного размера «BigInteger» (возможно, это зависит от режима компиляции и решений, выполняемых средой выполнения на основе реального оборудования). –
Вы всегда можете использовать decimal
, чтобы сохранить результат умножения двух чисел long
.
long bigNumber = 12345678L;
long anotherBigNumber = 23456789L;
decimal result = bigNumber * anotherBigNumber;
Умножение выполняется с помощью 'long' в вашем примере. Даже если вы перейдете к «десятичной» до того, как будете умножаться, может быть недостаточно «пробела». Попробуйте умножить '1000000000000000L' (пятнадцать нулей) с числом одного и того же размера. Результат будет «обертываться», если вы используете умножение 'long', и оно будет генерировать исключение, если вы используете умножение« decimal ». –
Он не говорит цифры типа 'long'. Он попросил умножить 64 цифры. –
Я думаю, что вы можете сделать расчет любого количества (до тех пор, как вы хотите) IF первое, что число конвертирования в строку (так две отдельных строки), чем получить последний номер (символ) и умножить его с каждым номером от другого персонажа (так же, как вы учились в школе) и т. д., и вы добавляете к нему окончательный номер счета (также как строку). Я знаю, что это может быть сделано, и это будет очень сложная логика в начале, но как только вы создадите эту функцию, вы можете умножить любое число, которое вы хотите :)
Если они являются целыми числами, используйте класс BigInteger в System.Numerics (Reference System.Numerics.dll!)
Если нет, в Codeplex есть класс BigRational. Он должен был быть в System.Numerics, но его ударили ногами. Link: http://bcl.codeplex.com/releases/view/42782
- 1. Умножение двух чисел параллельно
- 2. умножение двух чисел
- 3. Умножение двух массивов чисел
- 4. Как проверить умножение двух больших чисел
- 5. Умножение двух чисел последовательных сумм в F #
- 6. Умножение двух чисел, представленных в виде строк
- 7. Умножение двух целых чисел в партии
- 8. Умножение двух наборов чисел в python
- 9. Javascript умножение двух чисел возвращает NaN
- 10. Умножение двух целых чисел в C++
- 11. Умножение двух разных битовых чисел в VHDL
- 12. Matlab два комплексных чисел умножение
- 13. Умножение чисел самостоятельно
- 14. Умножение чисел как строка
- 15. Умножение массива комплексных чисел
- 16. умножение чисел в строке
- 17. Умножение реальных чисел
- 18. умножение чисел как матрицы
- 19. Сплит Умножение целых чисел
- 20. Умножение 16-разрядных чисел
- 21. Java умножение отрицательных чисел
- 22. Умножение чисел в MS Access
- 23. Умножение двух десятизначных 32-битных чисел на 32-битную архитектуру
- 24. Умножение двух целых чисел с использованием побитовых операторов
- 25. Почему умножение двух больших чисел показывает неправильный ответ?
- 26. Умножение двух 16-битных чисел - Почему результат 32-битный?
- 27. Умножение 32-битных двух чисел на микропроцессор 8086
- 28. Умножение двух чисел вне функции main() дает неизвестный результат
- 29. MARIE симулятор: умножение двух чисел с использованием добавления
- 30. Умножение всех чисел в двух массивах в javascript
Я не думаю, что вы можете хранить 64-разрядное число в любом современном процессоре с полной точностью, если вы имеете в виду десятичные цифры, а не двоичные цифры или что-то еще. Если у вас было ДВА 64-разрядных чисел (если начинать с ненулевого), тогда результат будет составлять около 128 цифр (10^64 * 10^64 = 10^128). Уч. – Joe
Вы действительно должны предоставить больше информации, чем это. Являются ли они целыми числами? Это очень важно. Цифры в какой базе? Binary? Десятичная дробь? Возможно, шестнадцатеричный? Это важно. – harold
Извините за недостающую информацию ... Оба носа. являются десятичными знаками – Bright