2011-02-12 34 views
5

Cómo comprobar si un int var contiene un número específicoCómo comprobar si un int var contiene un número específico

no puedo encontrar una solución para esto. Por ejemplo: necesito verificar si el int 457 contiene el número 5 en alguna parte.

Gracias por su ayuda;)

+0

El valor '' 457' int' en realidad no "contener" el número '5'. Su representación decimal sí lo hace. –

Respuesta

4

convertirlo en una cadena y comprobar si la cadena contiene el carácter '5'.

+0

que utiliza un algoritmo similar al bucle de módulo @ matt.dolfin ... entonces, ¿por qué construir la cadena? :) – akira

+0

Probablemente sea más rápido para enteros con miles de bits. % es caro. –

+0

@Marcus Johansson: para convertir el número en una cadena, deberá usar un algoritmo similar al que indicaron @@ matt.dolfin o @Shakti Singh. ADEMÁS de algunos gastos generales para crear la cadena MÁS algunos gastos generales que hacer una búsqueda de cadenas dentro de la cadena creada. – akira

13
457 % 10 = 7 * 

457/10 = 45 

45 % 10 = 5 * 

45/10 = 4 

    4 % 10 = 4 * 

    4/10 = 0 done 

¿Enterece?

Aquí hay una implementación C del algoritmo que implica mi respuesta. Encontrará cualquier dígito en cualquier número entero. Es esencialmente la misma exacta como la respuesta de Shakti Singh excepto que funciona para los enteros negativos y se detiene tan pronto como se encuentre el dígito ...

const int NUMBER = 457;   // This can be any integer 
const int DIGIT_TO_FIND = 5; // This can be any digit 

int thisNumber = NUMBER >= 0 ? NUMBER : -NUMBER; // ?: => Conditional Operator 
int thisDigit; 

while (thisNumber != 0) 
{ 
    thisDigit = thisNumber % 10; // Always equal to the last digit of thisNumber 
    thisNumber = thisNumber/10; // Always equal to thisNumber with the last digit 
            // chopped off, or 0 if thisNumber is less than 10 
    if (thisDigit == DIGIT_TO_FIND) 
    { 
     printf("%d contains digit %d", NUMBER, DIGIT_TO_FIND); 
     break; 
    } 
} 
+0

% => Modulo Operador –

+0

jup gracias lo tengo funcionando;) – c5754272

+1

Enfriar, haga clic en el cheque para marcarlo como la respuesta seleccionada si está satisfecho con mi ayuda. ¡Feliz programación! –

3
int i=457, n=0; 

while (i>0) 
{ 
n=i%10; 
i=i/10; 
if (n == 5) 
{ 
    printf("5 is there in the number %d",i); 
} 
} 
+0

printf ("..") .. comillas dobles es lo que c está usando para cadena, no comillas simples ... y tal vez abs (i) sería una buena idea. – akira

+0

@akira: Gracias a notificar –

+0

, en general, proporcionaría una función aquí con devoluciones 0 en error y 1 en golpe; y simplemente use 'while (i! = 0)', eso lo haría funcionar también con números negativos. – akira

Cuestiones relacionadas