Страницы

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

четверг, 28 марта 2019 г.

Ошибка в выводе бинома ньютона(c++)

Написал программу для вычисления бинома Ньютона. При вводе аргумента в диапазоне [1,13] все работает. Если вводить больший аргумент, то программа работает неправильно. В чем проблема?
#include #include
using namespace std;
int fact(int n) { int k = 1; if (n == 0) return 1; for (int i = 1; i <= n; i++) k = k*i; return k; }
void func(int n) { for (int j = 0; j < n; j++) { for (int i = 0; i <= j; i++) cout << (fact(j) / (fact(i)*fact(j - i))) << " "; cout << endl; } }
int main() { int n; cin >> n; func(n); system("pause"); }
Также вот вариант в онлайн компиляторе.


Ответ

13! = 6227020800
14! = 87178291200
int (4 байта) имеет диапазон [−2147483648; +2147483647], поэтому числа просто не влезают
Чтобы расширить возможности, не меняя алгоритма, можно поменять тип на unsigned long long (8 байт)

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

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