2017-01-23 5 views
-1

정수의 역 자릿수입니다. X = 123, 321 예 2를 반환 : 예 1역방향 정수

, X = -123 나는 정수 문제를 역 해결하기 위해 아래의 코드를 사용하려고했다 -321

돌아갑니다. 그러나 int를 문자열로 변환 한 다음 문자열을 int로 변환하면 오류가 발생합니다. 나는 메모리 할당이이 방법을 제한하는지 궁금해. 오류 :

오류는 선 4 호환되지 않는 유형 :이 작품처럼 긴에서 가능한 손실 변환

public class Solution { 
    public long reverse(int x) { 
     String input = String.valueOf(x); 
     char[] num = input.toCharArray(); 
     StringBuffer reverse = new StringBuffer(); 
     if(x<0){ 
      reverse.append("-"); 
      for(int i=num.length-1;i>0;i--){ 
       reverse.append(num[i]); 
      } 
     }else{ 
      for(int i=num.length-1;i>=0;i--){ 
       reverse.append(num[i]); 
      } 
     } 
     return Long.parseLong(reverse.toString()); 
    } 
} 
+2

무엇이 오류입니까? 귀하의 질문과 함께 그러한 정보를 게시하십시오. – QBrute

+0

어떤 종류의 오류가 있는지 알면 도움이 될 것입니다 ... ;-) – Axel

+0

안녕하세요! 어떤 오류가 발생했는지 보여줄 수 있습니까? –

답변

0

뭔가를 int로 :

public long reverse(int x) { 
    String input = String.valueOf(x); //123 
    long result = Long.parseLong(new StringBuilder(input).reverse().toString()); 
    return result; //321 
} 
+0

int가 반전 될 때 int에 들어갈 수있는 수보다 클 수 있기 때문에 long을 리턴해야합니다. –

+0

그렇게 생각하지 않았습니다. 내 대답 –

+0

을 편집 할 것입니다. 이제는해야 할 일이있을 것입니다. 그러나 단지'reverse() '를 호출하기 때문에 "속임수"로 간주 될 수도 있습니다. 아마도이 질문은 응시자가 어떻게 할 수 있는지 보려고했을 것입니다. 스스로 역전. –

2

그것은 당신이 요구 한 무엇을.

public static long reverseInteger(int n){ 
    String answer = ""; 
    if (n == Integer.MIN_VALUE) 
     return -8463847412L; 
    boolean negative = false; 
    if (n < 0) { 
     negative = true; 
     n = -n; 
    } 
    while (n > 0) { 
     answer += (n % 10); 
     n = n/10; 
    } 
    long toReturn = Long.parseLong(answer); 
    return (negative) ? -toReturn : toReturn; 
} 

static 키워드는 물론 선택 사항입니다. 사용 방법에 따라 다릅니다.

+0

왜'int'와'long' 대신'Integer'와'Long' 박스형을 사용하고 있습니까? –

+0

왜냐하면 나는 그것을 한 번 필요로하고 그것을 편집하지 않았다. 20 초 기다려;) –

+0

reverseInteger (Integer.MIN_VALUE) ;-)를 호출 해보십시오. –

1

오류 메시지는 아마도 코드의 다른 부분 때문일 수 있습니다. 아마도 reverse() (길다)에 의해 반환 된 값을 int 변수에 할당하려고합니다.

그러나 코드에 불필요한 비 효율성이 있습니다. String을 생성하고 다시 숫자로 다시 구문 분석합니다. 다음 코드는 전혀 문자열을 사용하지 않고 반전 수를 반환 :이 방법은 너무 음수 올바르게 작동하는지

public static long reverse(int n){ 
    long r = 0; 
    while (n != 0) { 
     r *= 10; 
     r += (n % 10); 
     n /= 10; 
    } 

    return r; 
} 

주를 특별히 그들을 위해 확인하지 않고.

이 방법은 가능한 모든 int 값에 적용됩니다.

+0

'Integer.MIN_VALUE'와 같은 하드 코딩 케이스는 사고 비용으로 인해 잘못된 방법이 아닙니다.) –

+0

실제로 첫 번째 버전은 Integer.MIN_VALUE를 특별히 처리해야했지만 Integer.MIN_VALUE를 포함한 모든 가능한 int 값에 대한 최신 편집이 가능합니다. . @ GrzegorzGórkiewicz –

+0

학교 같은 솔루션 (나쁘지 않습니다). 또 다른 옵션은 문자열로 연주하는 것입니다. –