类型无效的操作数' double'和' double'到二元'运算符%'

时间:2017-04-02 10:20:22

标签: c++

在解决关于hackerearth的问题时我得到了这个错误,我试图找到解决方案,但是当两个不同的数据类型用作操作数但在我的情况下两个sama数据类型的操作数,这里是我的完整代码< / p>

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    int arr[1000];
    int n;
    cin>>n;
    double ans=1;
    for(int i =0; i<n ;i++)
    {
        cin >> arr[i];
        ans=(ans*arr[i])%(pow(10,9)+7);
    }
    cout << ans;
    return 0;

}

2 个答案:

答案 0 :(得分:0)

模块运算符(即operator%)不是为浮点定义的,而是仅为整数定义的。

当您将ans声明为double时,表达式ans*arr[i]的计算结果为double。将它更改为int ans将有错误的语句编译(实际返回整数模数)。

答案 1 :(得分:0)

12.3 % 4.2的预期输出是多少? 如果您有答案,那么您还必须推出自己的实现,内置operator%仅适用于整数类型。

如果你对此感觉不错,但是你的参数碰巧是浮点值,那么round / floow / ceil / cast它们。 e.g:

static_cast<uint64_t>(double_value);