Estoy utilizando el operador módulo, pero aún me da un número negativo.
Estoy tratando de resolver un problema de programación en c++ (versión: (MinGW.org GCC Build-2) 9.2.0)
Estoy utilizando el operador módulo para obtener una respuesta en el rango int, pero para 6, me está dando una respuesta negativa. ¿Por qué está sucediendo esto?
Mi código:
#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;
}
davy.ai
El problema de obtener una respuesta negativa para el operador módulo en C++ se debe al hecho de que el operador módulo devuelve el residuo de una operación de división.
En el código dado, el resultado de pow(10, 9) + 7 se está convirtiendo a un entero, lo que esencialmente pierde la precisión del valor. En el caso de la entrada 6, el resultado del cálculo supera el valor máximo que se puede almacenar en un entero y, por lo tanto, la operación de módulo resulta en un valor negativo. Para solucionar este problema, utiliza el tipo de dato long long para mod en lugar de int.
Aquí está el código modificado:
“`c++
#include
#include
using namespace std;
int balancedBTs(int h) {
if (h <= 1) return 1;
}
int main()
{
int h;
cin >> h;
cout << balancedBTs(h) << endl;
return 0;
}
“`
Esto debería solucionar el problema de obtener valores negativos con el operador módulo.