2015-04-28 1 views
1

Je prends une classe d'introduction de base à C. J'ai le programme global pour fonctionner, mais il ne produit pas la sortie requise comme il se doit.Modification de valeurs entières

La tâche consiste à écrire un programme qui demande à l'utilisateur une valeur entière et de modifier l'entrée de sorte que la place 1s et 100s ait le même chiffre, quelle que soit la valeur la plus grande.

Par exemple:

1234 sera modifié pour 1434

1969 sera modifié pour 1969

2025 sera modifié pour 2525

Pour une raison quelconque, au lieu de prendre la plus grande valeur de la place 1s et 100s, le programme choisit la plus petite valeur pour modifier l'entrée de l'utilisateur.

1234 -> 1232

2025 -> 2020

1962 -> 1262

Tout conseils ou des idées sur ce qui pourrait se tromper?

#include <stdio.h> 
int main() { 

    int myValue; 
    int tmp; 
    int oneDigit; 
    int hundredDigit; 
    int larger; 
    int smaller; 
    int factor; 

    printf("\nEnter an int: "); 
    scanf("%d", &myValue); 

    // Getting absolute value 
    tmp = (myValue < 0) ? -myValue : myValue; 

    // Extracting digits 
    oneDigit = tmp % 10; 
    hundredDigit = (tmp/100) % 10; 

    // Grabbing larger and smaller integer 
    larger = (oneDigit > hundredDigit) ? oneDigit : hundredDigit; 
    smaller = (oneDigit > hundredDigit) ? hundredDigit : oneDigit; 

    // Checking what to factor by 
    factor = (oneDigit > hundredDigit) ? 1 : 100; 

    // New modified digit 
    tmp = tmp - (larger - smaller) * factor; 

    printf("\nThe modified value of %d is %d\n", myValue, tmp); 

    return 0; 

} 

Répondre

1
  1. Vous devez inverser le facteur dans cette déclaration.

    factor = (oneDigit > hundredDigit) ? 1 : 100; 
    

    Utilisez

    factor = (oneDigit > hundredDigit) ? 100 : 1; 
    
  2. Vous devez ajouter (larger - smaller) * factor;-tmp, pas soustraire.

    Au lieu de:

    tmp = tmp - (larger - smaller) * factor; 
    

    utilisation:

    tmp = tmp + (larger - smaller) * factor; 
    
+0

Nous vous remercions de votre réponse rapide. J'ai essayé votre méthode, mais quand je tape 1234, cela me donne 1236, ce qui n'est pas la sortie attendue Cependant, quand j'entre dans 1232, elle renvoie 1232, ce qui est la sortie attendue. Savez-vous pourquoi cela se passe? Même après avoir modifié les deux sections de code que vous avez indiqué était incorrect. Merci encore. –

1

La ligne de code:

// New modified digit 
tmp = tmp - (larger - smaller) * factor; 

ne fait aucun sens.

Dans les deux cas (oneDigit est plus ou hundredDigit est plus grand), vous devez ajouter une certaine valeur à tmp, et non Soustraire.

De même, vous avez calculé le facteur comme inverse. Il doit être:

factor = (oneDigit > hundredDigit) ? 100 : 1; 
1

changement ceci:

factor = (oneDigit > hundredDigit) ? 1 : 100; 

à

factor = (oneDigit > hundredDigit) ? 100 : 1; 

et aussi changer

tmp = tmp -(larger - smaller) * factor; 

à

tmp = tmp +(larger - smaller) * factor;