2017-04-13 7 views
-2

나는 긴 총액을 반전하는 프로그램을 완료했다. 그러나 어떤 이유로 2 개의 긴 값의 합을 역으로하려고 할 때 첫 번째 숫자가 떨어지게된다. 내가 사용하는 첫 번째 숫자는 1234567890000000000이고 두 번째 숫자는 1234567890입니다. 계산을 수행하면 합계가 1234567891234567890에 추가되고 0987654321987654321로 되돌릴 수 있습니다. 대신 내 프로그램이 0을 버리고 987654321987654321의 결과를 반환합니다. 내 while 루프 계산이 꺼져 있습니까? 567과 456 = 1023 같은 더 작은 정수를 시도하면 3201이 뒤집 혔을 것입니다. 제로가 어떤 값의 끝에 오면 역으로 잘못 생각합니다.합계를 역순으로 한 후 첫 번째 숫자를 잃지 않고 long sum을 뒤집는 방법은 무엇입니까?

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을 앞에두고 싶으면 string을 사용하십시오. –

+0

string.formatter를 사용하여 system.out으로 출력 할 때 결과로 반전 된 숫자의 0을 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하려면 :

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

걷고 : 여기

String tempValue = reverseSum.toString(); 

편집

손에서 작업을 수행 할 수있는 전체 코드입니다 앞에 오는 0을 저장하지 마십시오. 숫자를 긴 숫자로 저장 했으므로 맨 앞에 0이 삭제되었습니다. 그러나 문자열에 숫자를 저장하면 앞에 오는 0이 유지됩니다.