以下代码段是计算1< = k< = n和n到10 ^ 6的和(K *((nCk)^ 2)),但是程序开始给出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 :(得分:0)
你在做什么
prod = prod * (2+(i/(n-i))) ;
当(i /(n-1))不是整数时会丢失精度并给出重复的十进制数。这将导致意想不到的结果。