Question

L'exemple pour l'un des exercices dans le livre que je lis montre le code suivant:

#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;   
}   

Ma question est, le tout montre des états (entrée / = 10) qui, si je comprends correctement ce moyen essentiellement (entrée = entrée / 10). Maintenant, si cela est vrai, pourquoi ne pas la boucle il suffit d'exécuter de façon continue? Je veux dire, même si vous deviez diviser 0 par 10 alors que cela encore extraire un certain nombre. Si l'utilisateur est à l'entrée « 50607 », il faudrait d'abord coupé le « 7 », le « 0 », et ainsi de suite et ainsi de suite, mais pourquoi faut-il sortir de la boucle après le retrait de la « 5 ». Ne serait-réponse après la « 5 » être le même que le « 0 » entre le 5 et le 6 au programme?

Était-ce utile?

La solution

Vous semblez être confus au sujet de la différence entre / et %. Cette boucle est divise input et en utilisant le quotient, pas le reste. Pour votre exemple de 50607, la boucle va 5 itérations:

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

Après la dernière itération, input devient 0 et la boucle se termine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top