2017-04-13 56 views
-2

我已經完成了一個反轉長整數的程序,但由於某種原因,當我試圖扭轉兩個長整數值的總和時,它會丟棄第一個數字。我用的第一個數字是1234567890000000000和第二1234567890。當我做總增加1234567891234567890計算和假設扭轉到0987654321987654321.而是我的程序降到零,並返回987654321987654321.結果是我while循環數學了嗎?當你嘗試更小的整數像567和456 = 1023逆轉3201.我認爲當一個零值在任何值的末尾都會錯誤地反轉。如何在總和反轉後反轉長整數而不丟失第一位數字?

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); 

    } 

}

編輯

嘗試下面的代碼後,我得到一個編譯器錯誤:

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

如果您想保留0,請使用字符串。 –

+0

使用string.formatter將0輸出到system.out時產生的反向數字中的任何前導0 0 –

+0

整數不包含前導零。沒有像'01'這樣的整數,它是'1'。沒有'099'這個數字,它是'99'。 –

回答

2

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

這個問題是不是你的代碼,你不能有一個前導0的整數值。如果您想保持領先的0,則需要將其存儲爲字符串。

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

如果你想StringBuilder爲一個字符串:

String tempValue = reverseSum.toString(); 

編輯

這裏是完整的代碼來完成手頭的任務:

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

多頭不要存儲前導零。 因此,因爲您存儲了很長的數字,所以前導零被刪除。 但是,如果您將該號碼存儲在字符串中,則會保留前導零。