我正在使用模运算符,但它仍然给我一个负数

I am using modulo operator, but it still giving me a negative number

我正在尝试解决 C++ 中的编程问题(版本:(MinGW.org GCC Build-2) 9.2.0)
我正在使用模运算符在 int 范围内给出答案,但是对于 6 ,它给了我 -ve answer
为什么会这样??
我的代码:

#include <cmath>
#include <iostream>

using namespace std;

int balancedBTs(int h) {
    if (h <= 1) return 1;
    
    int x = balancedBTs(h - 1);
    int y = balancedBTs(h - 2);
    int mod = (int)(pow(10, 9) + 7);
    
    int temp1 = (int)(((long)(x) * x) % mod);
    int temp2 = (int)((2 * (long)(x) * y) % mod);

    int ans = (temp1 + temp2) % mod;
    
    return ans;
}
int main()
{
    int h;
    cin >> h;
    cout << balancedBTs(h) << endl;
    return 0;
}

输出:

代码做了两个隐含的假设:

  • int 至少是 32 位(否则 mod 的 1,000,000,007 将不适合)
  • long 比 int 大(避免乘法溢出)

这些假设都没有得到标准的保证https://en.cppreference.com/w/cpp/language/types

我无法访问问题中的同一平台,但如果我在 temp1 和 temp2 的分配中删除对 long 的转换,我可以准确地重现输出(有效地模拟平台是 sizeof int 和 long都是 4).

您可以通过检查 sizeof(int) 和 sizeof(long) 来验证第二个假设是否适用于您的平台。