#include <iostream>
Підключаємо стандартну бібліотеку вводу/виводу C++. Дає змогу користуватися cout для виводу та cin для вводу.
#include <iomanip> // для setw()
Бібліотека для форматованого виводу, зокрема функції setw() для вирівнювання чисел.
using namespace std;
Щоб не писати std::cout та std::endl кожного разу.
int main() {
cout << "Factorials for type int:\n";
int fact_int = 1;
for (int i = 1; i <= 25; i++) {
if (i > 12) {
cout << setw(2) << i << "! = Overflow int\n";
} else {
fact_int *= i;
cout << setw(2) << i << "! = " << fact_int << endl;
}
}
Цей блок обчислює факторіали для типу int. Перевірка i > 12 потрібна, бо після 12! буде переповнення.
cout << "\nFactorials for type long long:\n";
long long fact_ll = 1;
for (int i = 1; i <= 25; i++) {
if (i > 20) {
cout << setw(2) << i << "! = Overflow long long\n";
} else {
fact_ll *= i;
cout << setw(2) << i << "! = " << fact_ll << endl;
}
}
Аналогічно, але для типу long long, який більший. Переповнення після 20!.
system("pause");
return 0;
}
Зупинка програми до натискання клавіші (Windows) та повернення 0 як коду успіху.
| n | n! (приблизно) | Тип int | Тип long long |
|---|---|---|---|
| 1 | 1 | ok | ok |
| 2 | 2 | ok | ok |
| 3 | 6 | ok | ok |
| 4 | 24 | ok | ok |
| 5 | 120 | ok | ok |
| 6 | 720 | ok | ok |
| 7 | 5040 | ok | ok |
| 8 | 40 320 | ok | ok |
| 9 | 362 880 | ok | ok |
| 10 | 3 628 800 | ok | ok |
| 11 | 39 916 800 | ok | ok |
| 12 | 479 001 600 | ok | ok |
| 13 | 6 227 020 800 | переповнення | ok |
| 14 | 87 178 291 200 | переповнення | ok |
| 20 | 2 432 902 008 176 640 000 | переповнення | ok |
| 21 | 51 090 942 171 709 440 000 | переповнення | переповнення |
| 25 | 15 511 210 043 330 985 984 000 000 | переповнення | переповнення |
Факторіал росте дуже швидко. int переповнюється після 12!, а long long після 20!. Тому в програмі ми ставимо відповідні умови.