답변:
이렇게하려면 %
(mod) 연산자를 사용합니다 .
int number; // = some int
while (number > 0) {
print( number % 10);
number = number / 10;
}
mod 연산자는 숫자에 대한 int 나누기의 나머지를 제공합니다.
그래서,
10012 % 10 = 2
때문에:
10012 / 10 = 1001, remainder 2
참고 : Paul이 지적한대로이 번호는 역순으로 표시됩니다. 스택에 밀어 넣고 반대 순서로 튀어 나와야합니다.
숫자를 올바른 순서로 인쇄하는 코드 :
int number; // = and int
LinkedList<Integer> stack = new LinkedList<Integer>();
while (number > 0) {
stack.push( number % 10 );
number = number / 10;
}
while (!stack.isEmpty()) {
print(stack.pop());
}
로 변환 String
하고 사용 String#toCharArray()
또는 String#split()
.
String number = String.valueOf(someInt);
char[] digits1 = number.toCharArray();
// or:
String[] digits2 = number.split("(?<=.)");
경우에 당신은 이미 자바 (8)에이야 그리고 당신은, 나중에 그 일부 집계 작업을 수행 할 일이 사용을 고려 String#chars()
얻을 IntStream
그것의 아웃.
IntStream chars = number.chars();
split("")
하면 배열의 첫 번째 항목은 ""
입니다. 과 같은 다른 정규식을 사용하십시오 split("(?<=.)")
.
number.chars()
는 숫자가 아닌 Ascii 값으로 결과를 반환합니다. 따라서 숫자 "1234"는 "1", "2", "3", "4"대신 "49", "50", "51", "52"로 분할됩니다. 그것을하기 위해서는 다음과 같이 보일 것입니다 :IntStream chars = number.chars().map(Character::getNumericValue);
이건 어때요?
public static void printDigits(int num) {
if(num / 10 > 0) {
printDigits(num / 10);
}
System.out.printf("%d ", num % 10);
}
또는 콘솔로 인쇄하는 대신 정수 배열로 수집 한 다음 배열을 인쇄 할 수 있습니다.
public static void main(String[] args) {
Integer[] digits = getDigits(12345);
System.out.println(Arrays.toString(digits));
}
public static Integer[] getDigits(int num) {
List<Integer> digits = new ArrayList<Integer>();
collectDigits(num, digits);
return digits.toArray(new Integer[]{});
}
private static void collectDigits(int num, List<Integer> digits) {
if(num / 10 > 0) {
collectDigits(num / 10, digits);
}
digits.add(num % 10);
}
숫자 순서를 최하위 (index [0])에서 최상위 (index [n])로 유지하려면 다음 업데이트 된 getDigits ()가 필요합니다.
/**
* split an integer into its individual digits
* NOTE: digits order is maintained - i.e. Least significant digit is at index[0]
* @param num positive integer
* @return array of digits
*/
public static Integer[] getDigits(int num) {
if (num < 0) { return new Integer[0]; }
List<Integer> digits = new ArrayList<Integer>();
collectDigits(num, digits);
Collections.reverse(digits);
return digits.toArray(new Integer[]{});
}
+1
+1
if (number < 0) { return new Integer[0]; }
Integer[] samples = {11111, 123457, 0, -13334, 93846, 87892, 9876543, -1234, 012455};
아무도이 방법을 사용하는 것을 보지 못했지만 나에게 효과적이며 짧고 달콤합니다.
int num = 5542;
String number = String.valueOf(num);
for(int i = 0; i < number.length(); i++) {
int j = Character.digit(number.charAt(i), 10);
System.out.println("digit: " + j);
}
출력됩니다 :
digit: 5
digit: 5
digit: 4
digit: 2
0142323
진법 상수 같다 50387
것처럼 의한 선행 제로, 0x100
16 진수 정수이다 동일 256
의한 선두로 0x
한 0b1011
이진 상수 같다 11
선두에 기인 0b
. 정수 상수에서 0을 선행하는 것에주의하십시오!
Java 8 스트림을 사용하여 문제를 해결하는 예는 거의 없지만 이것이 가장 간단한 것으로 생각합니다.
int[] intTab = String.valueOf(number).chars().map(Character::getNumericValue).toArray();
명확하게 : String.valueOf(number)
int를 String으로 변환 한 다음 chars()
IntStream을 얻는 방법 (문자열의 각 문자는 이제 Ascii 숫자 임) map()
을 사용하여 Ascii 숫자의 숫자 값을 얻으려면 method를 실행해야합니다 . 마지막에 toArray()
메소드를 사용하여 스트림을 int [] 배열로 변경하십시오.
모든 대답이보기 흉하고 깨끗하지 않습니다.
문제를 해결하기 위해 약간의 재귀 를 사용하는 것이 좋습니다 . 이 게시물은 매우 오래되었지만 향후 코더에게 도움이 될 수 있습니다.
public static void recursion(int number) {
if(number > 0) {
recursion(number/10);
System.out.printf("%d ", (number%10));
}
}
산출:
Input: 12345
Output: 1 2 3 4 5
// could be any num this is a randomly generated one
int num = (int) (Math.random() * 1000);
// this will return each number to a int variable
int num1 = num % 10;
int num2 = num / 10 % 10;
int num3 = num /100 % 10;
// you could continue this pattern for 4,5,6 digit numbers
// dont need to print you could then use the new int values man other ways
System.out.print(num1);
System.out.print("\n" + num2);
System.out.print("\n" + num3);
배열, 재귀 및 모든 멋진 schmancy를 포함하지 않는보다 간단하고 이해하기 쉬운 접근 방식을 사용하여 정수의 숫자를 분리하는 방법을 보여주는 프로그램을 작성했습니다. 내 코드는 다음과 같습니다.
int year = sc.nextInt(), temp = year, count = 0;
while (temp>0)
{
count++;
temp = temp / 10;
}
double num = Math.pow(10, count-1);
int i = (int)num;
for (;i>0;i/=10)
{
System.out.println(year/i%10);
}
입력 값이 integer 123
인 경우 결과 출력은 다음과 같습니다.
1
2
3
여기 내 대답이 있습니다, 나는 그것을 위해 그것을했고 String 접근 방식을 사용하고 싶지 않거나 더 수학적인 해결책이 필요한 사람들에게는 충분히 간단하기를 바랍니다.
public static void reverseNumber2(int number) {
int residual=0;
residual=number%10;
System.out.println(residual);
while (residual!=number) {
number=(number-residual)/10;
residual=number%10;
System.out.println(residual);
}
}
그래서 나는 단위를 가져 와서 인쇄하고 숫자에서 빼고 그 숫자를 10으로 나눕니다. 단위가 사라지기 때문에 항상 떠 다니는 물건이 없습니다.
이 시도:
int num= 4321
int first = num % 10;
int second = ( num - first ) % 100 / 10;
int third = ( num - first - second ) % 1000 / 100;
int fourth = ( num - first - second - third ) % 10000 / 1000;
첫 번째 = 1, 두 번째 = 2, 세 번째 = 3 및 네 번째 = 4 ...가 표시됩니다.
%
. 가치가 거의 없습니다.
Java 8 솔루션은 문자열로 가지고있는 정수에서 int []로 숫자를 가져옵니다.
int[] digits = intAsString.chars().map(i -> i - '0').toArray();
i -> i - '0'
결과가 OP가 요청한 것과 정확히 일치하도록 매핑 을 포함하도록 답변을 업데이트 했습니다.
i - '0'
방법도 Character.toDigit
있습니다.
"0123456789".chars().map(i -> Character.digit(i, 10)).toArray()
Character # digit (char와 onet int codePoints)
Java 9 Stream.iterate
는 스트림을 생성하고 특정 조건에서 중지하는 데 사용할 수 있는 새로운 방법을 도입했습니다 . 이것은 모듈로 접근법을 사용하여 숫자의 모든 숫자를 얻는 데 사용될 수 있습니다.
int[] a = IntStream.iterate(123400, i -> i > 0, i -> i / 10).map(i -> i % 10).toArray();
이것은 숫자를 역순으로 가져 오지만 배열을 거꾸로 반복하거나 (어쨌든 배열을 뒤집는 것은 그렇게 간단하지 않습니다 ) 또는 다른 스트림을 생성 하여 해결할 수 있습니다 .
int[] b = IntStream.iterate(a.length - 1, i -> i >= 0, i -> i - 1).map(i -> a[i]).toArray();
또는
int[] b = IntStream.rangeClosed(1, a.length).map(i -> a[a.length - i]).toArray();
예를 들어이 코드는 다음과 같습니다.
int[] a = IntStream.iterate(123400, i -> i > 0, i -> i / 10).map(i -> i % 10).toArray();
int[] b = IntStream.iterate(a.length - 1, i -> i >= 0, i -> i - 1).map(i -> a[i]).toArray();
System.out.println(Arrays.toString(a));
System.out.println(Arrays.toString(b));
인쇄합니다 :
[0, 0, 4, 3, 2, 1]
[1, 2, 3, 4, 0, 0]
Integer.toString (1100) 은 정수를 문자열로 제공합니다. Integer.toString (1100) .getBytes () 는 개별 숫자의 바이트 배열을 가져옵니다.
편집하다:
문자 숫자를 숫자로 변환 할 수 있습니다.
String string = Integer.toString(1234);
int[] digits = new int[string.length()];
for(int i = 0; i<string.length(); ++i){
digits[i] = Integer.parseInt(string.substring(i, i+1));
}
System.out.println("digits:" + Arrays.toString(digits));
'1'
또는 '0'
. 바이트 값 1
은 또는이 아닙니다 0
.
이것은 모듈로 10 방법을 사용하여 0보다 큰 숫자로 각 숫자를 알아 낸 다음 배열 순서를 반대로합니다. 시작 숫자로 "0"을 사용하고 있지 않다고 가정합니다.
사용자 입력을 받도록 수정되었습니다. 이 배열은 원래 거꾸로 삽입되었으므로 Collections.reverse()
호출을 사용 하여 사용자 순서로 되돌려 놓아야했습니다.
Scanner scanNumber = new Scanner(System.in);
int userNum = scanNumber.nextInt(); // user's number
// divides each digit into its own element within an array
List<Integer> checkUserNum = new ArrayList<Integer>();
while(userNum > 0) {
checkUserNum.add(userNum % 10);
userNum /= 10;
}
Collections.reverse(checkUserNum); // reverses the order of the array
System.out.print(checkUserNum);
주제를 기반으로하기 위해 Java에서 숫자가 palindromic 정수인지 확인하는 방법은 다음과 같습니다.
public static boolean isPalindrome(int input) {
List<Integer> intArr = new ArrayList();
int procInt = input;
int i = 0;
while(procInt > 0) {
intArr.add(procInt%10);
procInt = procInt/10;
i++;
}
int y = 0;
int tmp = 0;
int count = 0;
for(int j:intArr) {
if(j == 0 && count == 0) {
break;
}
tmp = j + (tmp*10);
count++;
}
if(input != tmp)
return false;
return true;
}
이 알고리즘을 더 단순화 할 수 있다고 확신합니다. 그러나 여기가 내가있는 곳입니다. 그리고 그것은 모든 테스트 사례에서 작동했습니다.
나는 이것이 누군가를 돕기를 바랍니다.
int number = 12344444; // or it Could be any valid number
int temp = 0;
int divider = 1;
for(int i =1; i< String.valueOf(number).length();i++)
{
divider = divider * 10;
}
while (divider >0) {
temp = number / divider;
number = number % divider;
System.out.print(temp +" ");
divider = divider/10;
}
public int[] getDigitsOfANumber(int number) {
String numStr = String.valueOf(number);
int retArr[] = new int[numStr.length()];
for (int i = 0; i < numStr.length(); i++) {
char c = numStr.charAt(i);
int digit = c;
int zero = (char) '0';
retArr[i] = digit - zero;
}
return retArr;
}
의견과 함께 내 제안을 아래 참조하십시오
int size=i.toString().length(); // the length of the integer (i) we need to split;
ArrayList<Integer> li = new ArrayList<Integer>(); // an ArrayList in whcih to store the resulting digits
Boolean b=true; // control variable for the loop in which we will reatrive step by step the digits
String number="1"; // here we will add the leading zero depending on the size of i
int temp; // the resulting digit will be kept by this temp variable
for (int j=0; j<size; j++){
number=number.concat("0");
}
Integer multi = Integer.valueOf(number); // the variable used for dividing step by step the number we received
while(b){
multi=multi/10;
temp=i/(multi);
li.add(temp);
i=i%(multi);
if(i==0){
b=false;
}
}
for(Integer in: li){
System.out.print(in.intValue()+ " ");
}
이 같은 것은 다음을 반환합니다 char[]
:
public static char[] getTheDigits(int value){
String str = "";
int number = value;
int digit = 0;
while(number>0){
digit = number%10;
str = str + digit;
System.out.println("Digit:" + digit);
number = number/10;
}
return str.toCharArray();
}
Java 8을 사용하는이 질문에 대한 메소드가 표시되지 않으므로 이것을 넣을 것입니다. a로 시작하고을 String
원한다고 가정하면 List<Integer>
요소를 스트리밍 할 수 있습니다.
List<Integer> digits = digitsInString.chars()
.map(Character::getNumericValue)
.boxed()
.collect(Collectors.toList());
이것은의 문자를 얻을 String
A와 IntStream
, 숫자 값을 문자 그 정수 표현을 매핑 상자에게 그들을 다음리스트로를 수집합니다.
Collectors.toList()
→ " 유형 불일치 : Collector <Object, capture # 3-of ?, List <Object >>를 Supplier <R> " 로 변환 할 수 없습니다 . collect
→ "" collect (Supplier <R>, ObjIntConsumer <R 메소드 ?>, 유형 IntStream에 BiConsumer는 <R, R>) 인수 (콜렉터 <개체, 목록 <object >>) 적용 할 수 없습니다 "
이것이 숫자를 얻는 가장 유용한 방법이라고 생각합니다.
public int[] getDigitsOf(int num)
{
int digitCount = Integer.toString(num).length();
if (num < 0)
digitCount--;
int[] result = new int[digitCount];
while (digitCount-- >0) {
result[digitCount] = num % 10;
num /= 10;
}
return result;
}
그런 다음 간단한 방법으로 숫자를 얻을 수 있습니다.
int number = 12345;
int[] digits = getDigitsOf(number);
for (int i = 0; i < digits.length; i++) {
System.out.println(digits[i]);
}
또는 더 간단하게 :
int number = 12345;
for (int i = 0; i < getDigitsOf(number).length; i++) {
System.out.println( getDigitsOf(number)[i] );
}
마지막 메소드는 getDigitsOf 메소드를 너무 많이 호출합니다. 따라서 느려질 것입니다. int 배열을 만든 다음 두 번째 코드 블록과 마찬가지로 getDigitsOf 메서드를 한 번 호출해야합니다.
다음 코드에서는 처리를 반대로 수행 할 수 있습니다. 이 코드는 모든 숫자를 모아서 숫자를 만듭니다.
public int digitsToInt(int[] digits)
{
int digitCount = digits.length;
int result = 0;
for (int i = 0; i < digitCount; i++) {
result = result * 10;
result += digits[i];
}
return result;
}
내가 제공 한 두 가지 방법 모두 음수에도 적용됩니다.
import java.util.Scanner;
class Test
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int num=sc.nextInt();
System.out.println("Enter a number (-1 to end):"+num);
int result=0;
int i=0;
while(true)
{
int n=num%10;
if(n==-1){
break;
}
i++;
System.out.println("Digit"+i+" = "+n);
result=result*10+n;
num=num/10;
if(num==0)
{
break;
}
}
}
}
Java에서는 숫자와 숫자를 분리하여 배열에 저장할 수 있습니다.
public static void main(String[] args) {
System.out.println("Digits Array:: "+Arrays.toString(getNumberArr(1100)));
}
private static Integer[] getNumberArr(int number) {
//will get the total number of digits in the number
int temp = number;
int counter = 0;
while (temp > 0) {
temp /= 10;
counter++;
}
//reset the temp
temp = number;
// make an array
int modulo; //modulo is equivalent to single digit of the number.
Integer[] numberArr = new Integer[counter];
for (int i = counter - 1; i >= 0; i--) {
modulo = temp % 10;
numberArr[i] = modulo;
temp /= 10;
}
return numberArr;
}
산출:
Digits Array:: [1, 1, 0, 0]
import java.util.Scanner;
public class SeparatingDigits {
public static void main( String[] args )
{
System.out.print( "Enter the digit to print separately :- ");
Scanner scan = new Scanner( System.in );
int element1 = scan.nextInt();
int divider;
if( ( element1 > 9999 ) && ( element1 <= 99999 ) )
{
divider = 10000;
}
else if( ( element1 > 999 ) && ( element1 <= 9999 ) )
{
divider = 1000;
}
else if ( ( element1 > 99) && ( element1 <= 999 ) )
{
divider = 100;
}
else if( ( element1 > 9 ) && ( element1 <= 99 ) )
{
divider = 10;
}
else
{
divider = 1;
}
quotientFinder( element1, divider );
}
public static void quotientFinder( int elementValue, int dividerValue )
{
for( int count = 1; dividerValue != 0; count++)
{
int quotientValue = elementValue / dividerValue ;
elementValue = elementValue % dividerValue ;
System.out.printf( "%d ", quotientValue );
dividerValue /= 10;
}
}
}
배열과 문자열을 사용하지 않습니다. (숫자 1-99999)
출력 :
별도로 인쇄 할 숫자를 입력하십시오 :-12345
12 34 5
divider
.