长long数的模数

时间:2016-09-16 12:35:28

标签: c modulo unsigned-long-long-int

您好我在c中尝试了一个代码并考虑到以下代码行中的所有变量都是“long long int”,

  

money =(money%1000000007)+(((2 * pow(abs(a [i] -a [j]),k))%1000000007)%1000000007);

我收到一条错误,指出

error: invalid operands to binary % (have 'double' and 'int') money=(money % 1000000007)+(((2*pow(abs(a[i]-a[j]),k))%1000000007))) % 1000000007); ^

我不明白这个错误意味着什么,因为我没有使用double。我可以得到一个简短的解释吗?

2 个答案:

答案 0 :(得分:4)

%是整数运算符,pow()返回double。因此,您可能需要使用fmod或fmodf或将所有内容转换为int。

money=(money % 1000000007)+(((2*(long long int)pow(abs(a[i]-a[j]),k))%1000000007))) % 1000000007);

答案 1 :(得分:0)

你的问题是关于战俘。如果你看http://www.cplusplus.com/reference/cmath/pow/,你会看到无论你给它什么类型,它都会返回浮点数或双精度数。

尝试将pow的结果转换为int