YM :
public static int reverse(int n) {
int result = 0;
while (n > 0) {
result = result * 10 + n % 10;
n = n / 10;
}
return result;
}
나는 정수의 숫자를 반대하기 위해 노력하고있어. 대신 내가 한 일을 같은 코드를 수행하는, 그것을 할 수있는 다른 방법은 무엇입니까? 난 자바 스트림을 사용하여 반전 할 수 있습니까?
그들은했다 :
OK, 여기에 재미있는 구현입니다 IntStream
:
public static int reverse (int n) {
return IntStream.iterate (n, i -> i/10) // produces a infinite IntStream of n, n/10,
// n/100, ...
.limit(10) // 10 elements are sufficient, since int has <= 10 digits
.filter (i -> i > 0) // remove any trailing 0 elements
.map(i -> i % 10) // produce an IntStream of the digits in reversed
// order
.reduce (0, (r,i) -> r*10 + i); // reduce the reversed digits back
// to an int
}
예를 들어, 입력 123456789 들어, 제 무한 생성한다 IntStream
:
123456789,12345678,1234567,123456,12345,1234,123,12,1,0,0,...
10 개 요소를 제한하고, 0을 제거한 후, 우리는 남아 있습니다 :
123456789,12345678,1234567,123456,12345,1234,123,12,1
마지막 자리에 각 요소를 매핑 한 후, 우리는 얻을 :
9,8,7,6,5,4,3,2,1
이제 우리는 단지를 줄여야 할 IntStream
당신이 당신의 질문에서했던 것과 유사한 방식으로 - (10)을 곱한 중간 결과에 각 요소를 추가합니다 :
((((0 * 10 + 9) * 10 + 8) * 10 + 7) * 10 ....) * 10 + 1
입력 번호가 10 개 자리를 가지고 있다면 마지막 숫자> 1, 반전 된 결과 오버플 않습니다.
또한 부정적인 입력을 지원하지 않습니다.