Обрни број помоћу стека


Ниво тешкоће Лако
Често питани у МАК нокиа о9 решења
Математика Стацк

Обрнуто број користећи стек проблем дали смо целобројну променљиву која представља број. Одштампајте обрнуто дати број користећи стек.

Обрни број помоћу стека

Пример

Улазни : 12345

Излаз: 54321

Улазни : 207

Излаз: 702

Објашњење обрнутог броја помоћу стека

Нека је број н = 12345

Почните обилажење и похраните цифре датог броја у стог једну по једну и ажурирајте број као број / 10.

  • корак 1: н = 1234 стек = 5
  • корак 2: н = 123 стек = 5,4
  • корак 3: н = 12 стек = 5,4,3
  • корак 4: н = 1 стек = 5,4,3,2
  • корак 5: н = стек = 5,4,3,2,1

Након тога искочите елементе из стека и формирајте број као -

реверсе = реверсе + (вредност на врху стека * и) (где је и = 1, ажурирајте и као и * 10 у сваком кораку)

Према томе, излаз = 54321

Алгоритам за обртање броја помоћу стека

  1. Иницијализујте целобројну променљиву која представља број.
  2. Направите стог целобројног типа за чување цифара датог броја.
  3. Пређите дужином датог броја и док број није једнак 0, резултат датог броја мод 10 гурните у стог, а затим поделите дати број са 10 на свакој итерацији.
  4. Направите целобројну променљиву за чување реверса датог броја и иницијализујте је као 0. Креирајте другу целобројну променљиву која ће задржати вредност места цифара и иницијализовати је као 1.
  5. Пређите док стек није празан, тј. Величина стека није једнака 0. Ажурирајте целобројну променљиву да бисте спремили реверс датог броја као вредност сачувану у самој обрнутој променљивој плус резултат елемента на врху стог помножити са целобројном променљивом вредности места.
  6. Скочите / избришите елемент на врху стека и ажурирајте целобројну променљиву вредности места како се вредност ускладиштена у самој променљивој вредности места помножи са 10.
  7. Одштампајте целобројну променљиву која садржи наличје датог броја.

Ц ++ програм за обртање броја помоћу стека

#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

Јава програм за обртање броја помоћу стека

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

Анализа сложености

Сложеност времена: О (лог н) где је н дужина датог броја.

Помоћни простор: О (лог н) јер смо користили лог н додатни размак да преокренемо цифре датог броја.

Референце