代码给出了荒谬的答案

Code is giving absurd answer

本文关键字:答案 荒谬 代码      更新时间:2023-10-16

下面的代码段是计算sum(K*((nCk)^2)),对于1<=k<=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;
}

你在做

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

当(i/(n-1))不是整数并且给出循环小数时,将失去精度。这将导致意想不到的结果。

相关文章: