Написал программу для вычисления бинома Ньютона. При вводе аргумента в диапазоне [1,13] все работает. Если вводить больший аргумент, то программа работает неправильно. В чем проблема?
#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 байт)
Комментариев нет:
Отправить комментарий