es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

error: operandos inválidos en expresión binaria (‘long’ y ‘double’); error de long % pow

#include <cs50.h>
#include <stdio.h>
#include <math.h>

int main(void)
{

long CardNumber = get_long ("Número de tarjeta: ");

long d5;

d5 = CardNumber % (long)pow(10, 5) / (long)pow(10, 4);

printf("Dígito 1 =  %li\n", d5);

}

¿Es verdad que el operador módulo % no funciona con la función pow o hice algo mal?
Si reemplazo pow (10, 5) por el número 100000, mi código funciona. Si defino pow (10, 5) como otra variable, también funciona. Lido con números con muchos ceros y no quiero contarlos a mano cada vez, ni agregar una variable adicional.

ninguna
error: operandos inválidos para la expresión binaria (‘long’ y ‘double’)
d5 = CardNumber % pow (10, 5) / pow (10, 4);
~~~~~~~~~~ ^ ~~~~~~~~~~~</math.h></stdio.h></cs50.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Es cierto que el operador de módulo % no puede ser utilizado directamente con la función pow porque la función devuelve un valor double y % requiere dos operandos enteros. En este fragmento de código, pow(10, 5) devuelve un valor double, por lo que no puede ser utilizado directamente con %.

    Sin embargo, hay un par de soluciones alternativas para esto. Una forma es convertir el resultado de pow a un entero antes de utilizarlo con %. Por ejemplo, puedes modificar la línea que establece d5 de la siguiente manera:

    d5 = CardNumber % (long)pow(10, 5) / (long)pow(10, 4);
    

    Aquí, el resultado de pow(10, 5) se convierte a long antes de ser utilizado con %. De manera similar, el resultado de pow(10, 4) también se convierte a long.

    Otra forma de manejar esto es definir una variable constante separada y utilizarla en lugar de pow(10, 5). Por ejemplo:

    const long DIGITO_5 = 10000L;
    d5 = CardNumber % (DIGITO_5 * 10) / DIGITO_5;
    

    Aquí, definimos una variable constante DIGITO_5 que representa pow(10, 4) (multiplicado por 10 para la operación de módulo de cinco dígitos), por lo que puede ser utilizado directamente con %. La segunda línea calcula el módulo de cinco dígitos y extrae el dígito que se almacenará en d5.

    Cualquiera de estos métodos debería funcionar correctamente con el fragmento de código que proporcionaste y evitar el error con el que te encontraste.

Comments are closed.