编译整个代码后,这是我得到的错误:
[Error] invalid operands of types '__gnu_cxx::__promote_2<int, int, double, double>::__type {aka double}' and 'int' to binary 'operator%'
我尝试在代码的最后一行中将n / 2强制转换为int
,但仍然显示相同的错误:
int rem(int n,int b,int d)
{
if(n==1)
{
return b%d;
}
else
{
return (pow(rem(n/2,b,d),2)%d);
}
}
答案 0 :(得分:1)
问题出在pow
上。它返回一个double
,在C ++中不允许将%
与非整数类型参数一起使用(顺便说一下,在Java中)。
但是,无论如何,您都不应该使用pow
来平方一个数字。
写作
auto r = rem(n/2,b,d);
return r * r % d;
好多了。如果某些人喜欢使用多余的括号,则可能更喜欢(r * r) % d
。