스택을 사용하여 숫자 반전

난이도 쉽게
자주 묻는 질문 MAQ 노키아 o9 솔루션
수학 스택조회수 55

사용하여 번호를 반대로 스택 문제는 숫자를 나타내는 정수 변수를 제공했습니다. 스택을 사용하여 주어진 숫자를 반대로 인쇄하십시오.

스택을 사용하여 숫자 반전

입력 : 12345

출력 : 54321

입력 : 207

출력 : 702

스택을 사용하여 숫자 반전에 대한 설명

숫자 n = 12345

순회를 시작하고 주어진 숫자의 자릿수를 하나씩 스택에 저장하고 숫자를 숫자 / 10으로 업데이트합니다.

  • 1 단계 : n = 1234 스택 = 5
  • 2 단계 : n = 123 스택 = 5,4
  • 3 단계 : n = 12 스택 = 5,4,3
  • 4 단계 : n = 1 스택 = 5,4,3,2
  • 5 단계 : n = 스택 = 5,4,3,2,1

그 후 스택에서 요소를 꺼내 다음과 같이 숫자를 형성합니다.

reverse = reverse + (스택 맨 위의 값 * i) (여기서 i = 1, i를 각 단계에서 i * 10으로 업데이트)

따라서 출력 = 54321

스택을 사용하여 숫자를 반전하는 알고리즘

  1. 숫자를 나타내는 정수 변수를 초기화합니다.
  2. 주어진 숫자의 자릿수를 저장할 정수 유형의 스택을 만듭니다.
  3. 주어진 숫자의 길이를 가로 지르고 숫자가 0이 아닌 동안 주어진 숫자 mod 10의 결과를 스택에 넣은 후 매 반복마다 주어진 숫자를 10으로 나눕니다.
  4. 주어진 숫자의 역수를 저장하고 0으로 초기화하는 정수 변수를 생성합니다. 숫자의 자릿값을 보유 할 다른 정수 변수를 생성하고 1로 초기화합니다.
  5. 스택이 비어 있지 않을 때 트래버스합니다. 즉 스택의 크기가 0이 아닙니다. 반전 변수 자체에 저장된 값과 맨 위에있는 요소의 결과로 주어진 숫자의 반전을 저장하도록 정수 변수를 업데이트합니다. 스택에 자리 값의 정수 변수를 곱합니다.
  6. 스택 맨 위에있는 요소를 팝 / 삭제하고 자릿값 변수 자체에 저장된 값에 10을 곱하면 자릿값의 정수 변수를 업데이트합니다.
  7. 주어진 숫자의 반대를 포함하는 정수 변수를 인쇄합니다.

스택을 사용하여 숫자를 반전하는 C ++ 프로그램

#include <iostream>
#include <stack>
using namespace std; 
  
stack <int> st; 
  
void push_digits(int number){ 
    
    while(number != 0){ 
        st.push(number % 10); 
        number = number / 10; 
    } 
} 
  
int reverse_number(int number){ 
    push_digits(number); 
      
    int reverse = 0; 
    int i = 1; 
      
    while(!st.empty()){ 
        reverse = reverse + (st.top() * i); 
        st.pop(); 
        i = i * 10; 
    } 
      
    return reverse; 
} 
  
int main(){ 
    int number = 12345; 
      
    cout << reverse_number(number); 
      
    return 0; 
}
54321

스택을 사용하여 숫자를 반전시키는 Java 프로그램

import java.util.Stack; 
  
class ReverseDigits{ 
    
    static Stack<Integer> st= new Stack<>(); 
  
    static void push_digits(int number){ 
        
        while(number != 0){ 
            st.push(number % 10); 
            number = number / 10; 
        } 
    } 
  
    static int reverse_number(int number){ 
        push_digits(number); 
        int reverse = 0; 
        int i = 1; 
  
        while (!st.isEmpty()){ 
            reverse = reverse + (st.peek() * i); 
            st.pop(); 
            i = i * 10; 
        } 
  
        return reverse; 
    } 
  
    public static void main(String[] args){ 
        int number = 12345;
        
        System.out.println(reverse_number(number));
        
    } 
}
54321

복잡성 분석

시간 복잡성 : O (log n) 여기서 n은 주어진 숫자의 길이입니다.

보조 공간 : O (log n) 왜냐하면 주어진 숫자의 자릿수를 반전시키기 위해 log n 추가 공간을 사용했기 때문입니다.

참조

Translate »