我在具有递归功能的代码的这一部分中遇到此错误

时间:2019-05-17 13:02:33

标签: c++ recursion

编译整个代码后,这是我得到的错误:

[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);
    }

}

1 个答案:

答案 0 :(得分:1)

问题出在pow上。它返回一个double,在C ++中不允许将%与非整数类型参数一起使用(顺便说一下,在Java中)。

但是,无论如何,您都不应该使用pow来平方一个数字。

写作

auto r = rem(n/2,b,d);
return r * r % d;

好多了。如果某些人喜欢使用多余的括号,则可能更喜欢(r * r) % d