помогите найти ошибку в коде C++. Wrong answer
Условие Необходимо вычислить число сочетаний из nпо k (Cnk). Примечание 1:;Cnk;= n! / (k! * (n - k)!)
Примечание 2: Для языков с динамической типизацией и(или) встроенными возможностями на длинную арифметику, если ваше решение подразумевает, что в процессе вычислений, вы будете получать значения, выходящие за пределы стандартных ограничений, то такие решения преподаватели могут отклонить, по правилу 17.
Входные данные В первой строке входного файла даны два;натуральных числа;n и k (1 ≤ n,;k ≤ 50, Cnk≤109 ).
Выходные данные В выходной файл необходимо вывести единственное значение - Cnk;.
Ограничения Время — 1000 ms
мой код:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, k;
cin >> n >>k;
long long f = 1;
long long f1 = 1;
long long f2 = 1;
for (int x = 1; x <= n; x++)
{
f *= x;
}
for (int y = 1; y <= k; y++)
{
f1 *= y;
}
for (int z = 1; z <= (n - k); z++)
{
f2 *= z;
}
cout << f / (f1 * f2);
return 0;
}
В некоторых тестах выдает ошибку Wrong answer. Да и код не всегда выдает число (когда ввожу 100 и 99 например )
Ответы (1 шт):
У вас явные переполнения...
Попробуйте
unsigned long long c = 1;
for(unsigned int i = 1; i <= k; ++i)
{
c *= n-k+i;
c /= i;
}