2017-04-13 4 views
-2

J'ai terminé un programme où il inverse la somme longue, mais pour une raison quelconque, lorsque j'essaie d'inverser la somme de deux valeurs longues, il laisse tomber le premier nombre. Le premier nombre que j'utilise est 1234567890000000000 et le second 1234567890. Quand je fais les calculs, le total ajoute à 1234567891234567890 et suppose de revenir à 0987654321987654321. Au lieu de cela, mon programme abandonne le zéro et renvoie un résultat de 987654321987654321. Est-ce que ma boucle mathématique est désactivée? Lorsque vous essayez des entiers plus petits comme 567 et 456 = 1023 inversé 3201. Je pense que quand un zéro est à la fin de n'importe quelle valeur il s'inverse incorrectement.Comment inverser une somme longue sans perdre le premier chiffre après la somme inverse?

import java.math.*; 
import java.util.Scanner; 
import java.lang.*; 

public class Exercise3 
{  
    public static void main(String args[]) 

    { 

     Scanner sc = new Scanner(System.in); 

     System.out.println("Enter first number: "); 

     long n1 = sc.nextLong(); 

     System.out.println("Enter second number: "); 

     long n2 = sc.nextLong(); 

     long sum = n1+n2; 

     long reverseSum = 0; 

     long rem; 

     while(sum != 0) 
     { 
     rem = sum % 10; 
     reverseSum = reverseSum * 10 + rem; 
     sum = sum/10; 
     } 

     System.out.println("The reversed sum is " + reverseSum); 

    } 

}

EDIT

après avoir essayé le code ci-dessous, je reçois une erreur de compilation:

StringBuilder reverseSum = new StringBuilder(sum); 
System.out.println("The reversed sum is " + reverseSum.reverse()); 
String tempValue = reverseSum.toString(); 

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: at Exercise3.main(Exercise3.java:27) /Users/dgrate321/Library/Caches/NetBeans/8.2/executor-snippe‌​ts/run.xml:53: Java returned: 1 BUILD FAILED (total time: 11 seconds)

+2

Si vous souhaitez conserver les 0 à l'avant, utilisez une chaîne. –

+0

utilisez un string.formatter à 0 en tapant tous les 0 principaux dans votre numéro inversé résultant lorsque vous l'affichez dans system.out –

+0

Les entiers ne comportent pas de zéros en tête. Il n'y a pas de nombre entier comme '01', c'est' 1'. Il n'y a pas de numéro tel que «099», c'est «99». –

Répondre

2

Instead my program drops the zero and return a result of 987654321987654321. Is my while loop math off?

la question est pas votre code, vous ne pouvez tout simplement pas avoir des valeurs entières avec 0. Si vous voulez garder le premier 0, vous devrez le stocker sous forme de chaîne.

StringBuilder reverseSum = new StringBuilder(Long.toString(sum)); 
System.out.println("The reversed sum is " + reverseSum.reverse()); 

si vous voulez que le StringBuilder comme une chaîne:

String tempValue = reverseSum.toString(); 

EDIT

ici est le code complet pour accomplir la tâche à accomplir:

public static void main(String[] args){ 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter first number: "); 
    long n1 = sc.nextLong(); 
    System.out.println("Enter second number: "); 
    long n2 = sc.nextLong(); 
    long sum = n1+n2; 

    StringBuilder reverseSum = new StringBuilder(Long.toString(sum)); 
    System.out.println("The reversed sum is " + reverseSum.reverse()); 
} 
0

Longs Ne stockez pas les zéros en tête. Donc, parce que vous avez stocké le nombre dans un long, les zéros de tête ont été supprimés. Toutefois, si vous avez stocké le nombre dans une chaîne, les zéros en tête seront conservés.