Страницы

Поиск по вопросам

среда, 27 ноября 2019 г.

Деление огромного числа

#c_sharp


Есть огромное число в виде текстовой строки, 24 десятичных знака в длину (например,
345678923456789876543234). Это число надо разделить на другое, достаточно малое число
(например, 97).

Как выполнить деление, если из-за длины числа недоступен даже long и ulong?
    


Ответы

Ответ 1



Воспользуйтесь структурой BigInteger: Console.WriteLine(BigInteger.Parse("345678923456789876543234") / 97); // выдаёт 3563700241822576046837 Не забудьте подключить сборку System.Numerics. Если нужно и частное, и остаток, то делайте так: BigInteger dividend = BigInteger.Parse("345678923456789876543234"); BigInteger quotient = dividend / 97; BigInteger remainder = dividend % 97; (ну или воспользуйтесь BigInteger.DivRem, если хотите). Остаток можно скастить в int, т. к. он помещается туда: int remainder = (int)(dividend % 97);

Ответ 2



Если BigInteger недоступен Разбейте число на части, например, поделите отдельно "слева направо", добавляя остаток от деления левой части к правой, пока не дойдете до самой "правой", которую поделите обычным способом, и соедините результат в одно число (или строку, если не влезет)

Ответ 3



Навскидку: using System.Numerics; ... //Ваша строка, полученная путем манипуляций. string yourStringNumber = "345678923456789876543234"; //Преобразуем строку в число. BigInteger big = BigInteger.Parse(yourStringNumber); //это ваш делитель, равный сейчас 97. int divider = 97; //Получаем остаток от деления на 97.... Ну или что у вас там будет в переменную divider записано. BigInteger result = big % divider; //Вывод результата строкой на форму, в контрол label1 или... label1.Text = result.ToString(); //...Показываем число строкой в отдельном модальном окне. И так далее.... MessageBox.Show(result.ToString()); ...

Комментариев нет:

Отправить комментарий