Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created October 2, 2025 09:44
Show Gist options
  • Save sunmeat/f96775d17f08ada8ea278f7cf794ca11 to your computer and use it in GitHub Desktop.
Save sunmeat/f96775d17f08ada8ea278f7cf794ca11 to your computer and use it in GitHub Desktop.
довга арифметика C#
using ExtendedNumerics; // BigDecimal - ставимо через Nuget
using System.Numerics; // BigInteger - вбудований тип
using System.Text;
class Program
{
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
BigInteger factorial = 1;
int n = 29; // обчислюємо 29!
for (int i = 1; i <= n; i++)
{
factorial *= i;
}
Console.WriteLine($"Факторіал {n}! = {factorial}");
// вивід: Факторіал 29! = 8841761993739701954543616000000
// ===========================================================
// cтворюємо BigDecimal з точністю
var one = new BigDecimal(1);
var three = new BigDecimal(3);
// обчислюємо 1 / 3
var result = one / three;
// округляємо до 100 знаків після коми
var roundedResult = BigDecimal.Round(result, 100);
Console.WriteLine("1 / 3 з точністю до 100 знаків:");
Console.WriteLine(roundedResult.ToString());
// вивід: 0.3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
}
}
/* Відомо, що комп'ютер може оперувати числами, кількість бітів яких обмежена.
* Зазвичай ми звикли працювати з 32-бітними та 64-бітними цілими числами,
* яким на платформі .NET відповідають типи Int32 (int) та Int64 (long)
* відповідно.
А що робити, якщо потрібно представити число, таке як, наприклад,
29! = 8841761993739701954543616000000? Таке число не поміститься ні в 64-бітний,
ні тим більше в 32-бітний тип даних. Саме для роботи з такими великими числами
існує довга арифметика.
Довга арифметика — у обчислювальній техніці операції (додавання, множення,
віднімання, ділення, піднесення до степеня тощо) над числами, розрядність яких
перевищує довжину машинного слова даної обчислювальної машини.
Ці операції реалізуються не апаратно, а програмно, використовуючи базові
апаратні засоби роботи з числами менших порядків.
Довгу арифметику також можна вважати одним з розділів олімпіадного програмування,
оскільки дуже часто при розв'язанні задач розрядності стандартних типів
не вистачає для представлення кінцевого результату. При виборі мови
програмування для олімпіадних потреб не менш важливим є вбудований у неї набір
засобів (готовими бібліотеками, реалізованими класами). Багато мов (Java, Ruby,
Python) мають вбудовану підтримку довгої арифметики, що в рази може скоротити
час написання програми.
Платформа .NET аж до версії 4.0 не мала вбудованої підтримки роботи з довгими
числами. У 4-й же версії .NET обзавелася не тільки довгими, але й комплексними
числами. Цей функціонал доступний через збірку System.Numerics та типи
BigInteger і Complex, визначені в однойменному з назвою збірки просторі імен.
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment