我的二进制供电功能有问题。包含结果的变量在执行乘法时溢出并给出错误结果。它发生在源值大于4,312,952,827时。那么我该如何解决这个问题呢?这是我的函数的代码。二元供电给我一个错误的结果
unsigned long long binpow(unsigned long long a, unsigned long long n, unsigned long long m)
{
unsigned long long res;
res=1;
while (n)
{
if (n & 1)
{
res=(res*a)%m;
n--;
}
a=(a*a)%m;
n >>= 1;
}
return res;
}
案例:'binpow(positive_a,0,1)'产生错误的答案'1'。可以从'unsigned long long res = 1LLU%m'开始来捕捉这种情况。 – chux