Created
October 2, 2025 09:44
-
-
Save sunmeat/f96775d17f08ada8ea278f7cf794ca11 to your computer and use it in GitHub Desktop.
довга арифметика C#
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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