Pregunta

El ejemplo de uno de los ejercicios en el libro que estoy leyendo muestra el siguiente código:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int input, reverse, numberOfDigits;

    reverse = 0;
    numberOfDigits = 0;

    NSLog (@"Please input a multi-digit number:");
    scanf ("%i", &input);

    if ( input < 0 ) {
        input = -input;
        NSLog (@"Minus");
    }

    do {
        reverse = reverse * 10 + input % 10;
        numberOfDigits++; 
    } while (input /= 10);

    do {
        switch ( reverse % 10 ) {
        case 0:
            NSLog (@"Zero");
            break;
        case 1:
            NSLog (@"One");
            break;
        case 2:
            NSLog (@"Two");
            break;
        case 3:
            NSLog (@"Three");
            break;
        case 4:
            NSLog (@"Four");
            break;
        case 5:
            NSLog (@"Five");
            break;
        case 6:
            NSLog (@"Six");
            break;
        case 7:
            NSLog (@"Seven");
            break;
        case 8:
            NSLog (@"Eight");
            break;
        case 9:
            NSLog (@"Nine");
            break;
        }
        numberOfDigits--;
    } while (reverse /= 10);

    while (numberOfDigits--) {
        NSLog (@"Zero");
    }


    [pool drain];   
    return 0;   
}   

Mi pregunta es la siguiente, mientras que la muestra de los estados (entrada / = 10), que, si lo entiendo correctamente básicamente medios (entrada = entrada / 10). Ahora, si eso es cierto, ¿por qué no el bucle acaba de funcionar continuamente? Es decir, incluso si se va a dividir en un 10 0 entonces eso sería todavía extraer un número. Si el usuario era a la entrada de "50607", sería primero cortó el "7", entonces el "0", y así sucesivamente y así sucesivamente, pero ¿Por qué salir del bucle después de retirar el "5". ¿No la respuesta después de la "5" será el mismo que el "0" entre el 5 y el 6 al programa?

¿Fue útil?

Solución

parece estar confundido sobre la diferencia entre / y %. Ese bucle está dividiendo input y utilizando el cociente, no el resto. Para su ejemplo de 50607, el bucle sale 5 iteraciones:

  1. input = 50607
  2. input = 5060
  3. input = 506
  4. input = 50
  5. input = 5

Después de la última iteración, se convierte en input extremos 0 y el bucle.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top