Кодекс дает абсурдный ответ

Следующий фрагмент кода предназначен для вычисления суммы (K * ((nCk) ^ 2)) для 1<= к<= n и для n до 10 ^ 6, но программа начинает давать полный ответ при n> 20. Пожалуйста, помогите мне. Я думаю, что это может быть потому, что продукт не может хранить такую ​​большую ценность, но что делать?

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int t;
scanf("%i",&t);
while(t--)
{
int n;
scanf("%i",&n);
double prod=1;
if (n!=1)
{
for(float i=1;i<n;i++)
{
prod = prod * (2+(i/(n-i))) ;
prod = fmod(prod,1000000007.0);
}
prod = prod * n;
}
else prod=1 ;
prod = int(prod)%1000000007;
cout<<prod;
printf("\n");
}
return 0;
}

0

Решение

Ты делаешь

prod = prod * (2+(i/(n-i))) ;

Вы потеряете точность, когда (i / (n-1)) не является целым и дает повторяющееся десятичное число. Это приведет к неожиданным результатам.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]