2016-02-19 4 views
-4

Je travaille actuellement sur un programme qui produit le nombre 1089 (c'est-à-dire le nombre magique) d'un entier à trois chiffres dont le premier chiffre est plus grand que le dernier. J'ai du code tapé, mais je ne reçois pas le 1089, mais je reçois 891. Quelqu'un pourrait-il expliquer pourquoi?Explication du code C++

//Uses a cout to inform user will be using the number 412 as an example. 
     //Uses a cout to explain to user the number needs to be reversed. 
     cout << "Alright, let's walk through an example, using the number 412." << endl; 
     int numExample = 412; 
     cout << "Please input 412" << endl; 
     cin >> numExample; 
     cout << "First, the number 412 is reversed." << endl; 
     //The following is done for reversing the number 412: 
      int reverseNum = 0, remainder = 0; 
      while (numExample) 
      { 
       remainder = numExample % 10; 
       reverseNum = (reverseNum * 10) + remainder; 
       numExample = numExample/10; 
      } 
       cout << "The reverse of 412 is " << reverseNum << endl; 
     cout << "Next, we want to subtract the reverse of the original number from its reverse" << endl; 
     cout << "This gives us 198" << endl; 
     cout << "From there, we want to reverse 198." << endl; 
     //The same procedure is used to reverse 198 
     int numExample2 = 198; 
     cout << "Please enter 198" << endl; 
     cin >> numExample2; 
      int reverseNum2 = 0, remainder2 = 0; 
      while (numExample2) 
      { 
       remainder2 = numExample2 % 10; 
       reverseNum2 = (reverseNum2 * 10) + remainder2; 
       numExample2 = numExample2/10; 
      } 
     cout << "The reverse of 198 is " << reverseNum2 << endl; 
     int magicNumber = (reverseNum2 + numExample2); 
     cout << "Following that, we want to add 891 to 189 which gives us " << magicNumber << endl; 
+1

Indice: Quelle est la valeur de 'numExample2' après la boucle' while (numExample2) '? (Si vous ne savez pas, imprimez-le.) – molbdnilo

+0

Je crois que je l'ai défini ci-dessus, mais 'numExample2' est un entier égal à 198. –

+1

Vraiment? Ajoutez 'cout << numExample2 << endl;' immédiatement après avoir imprimé 'reverseNum2'. Et réfléchissez un peu plus sur les causes de la fin de la boucle. – molbdnilo

Répondre

0

Essayez d'écrire une fonction pour gérer ce que votre code est plus propre (Il sera également plus facile pour les gens de vous aider!)

#include <iostream> 
#include <cmath> 
using namespace std; 

int reverseDigit(int num); // For example purposes 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int Number1, 
    Number2, 
    temp1, 
    temp2, 
    Result; 

    cout << "Enter the number 412: "; 
    cin >> Number1; 

    temp1 = reverseDigit(Number1); 

    temp1 = Number1 - temp1; 

    cout << "Enter the number 198: "; 
    cin >> Number2; 

    temp2 = reverseDigit(Number2); 

    Result = temp1 + temp2; 

    cout << "The magic number is: " << Result << endl; 

    return 0; 
} 

int reverseDigit(int num) 
{ 
    int reverseNum = 0; 
    bool isNegative = false; 

    if (num < 0) 
    { 
     num = -num; 
     isNegative = true; 
    } 

    while (num > 0) 
    { 
     reverseNum = reverseNum * 10 + num % 10; 
     num = num/10; 
    } 

    if (isNegative) 
    { 
     reverseNum = -reverseNum; 
    } 

    return reverseNum; 
} 

Je sais que vous ne travaillez pas avec des négatifs si vous pouvez supprimer ce bit si vous avez choisi d'utiliser ceci, vous pouvez également développer sur lui ... Cela étant dit, cela rendra le processus "Inverser" réel plus facile à travailler et à améliorer et à lire.

+0

@molbdnilo Ou faites-le mieux, et écrivez une fonction pour ne pas vous perdre dans votre propre travail! (S'IL VOUS PLAÎT NOTE: L'utilisation de vous et votre général est et ne vise pas à vous personnellement, mais à tout le monde qui a lu le commentaire ..) – suroh