rozbijanie liczby na cyfry

0

Hej ;) mam taki program do napisania że wczytuje liczbę calkowitą np: 123
i mamy wyświetlić :

1
2
3

Musze to zrobic przy pomocy pętli while lub do...while. Udało mi się wyrzeżbić że pokazuje mi od tyłu czyli:

3
2
1

Tylko że Ja potrzebuje odwrotnie :/ czy ktoś wie jak się do tego zabrać. Może problem banalny ale dopiero zaczynam swoje przygodę z C++, więc czasem najprostsze programy są najtrudniejsze. Z góry dzięki za pomoc.

0

Pokaż kod, rozwiązaniem byłoby tu wczytanie tej liczby do tablicy char'ów i po prostu wyświetlanie jej zawartości, znak po znaku, w osobnej linii.

1

Możesz to zrobic rekurencyjnie, albo z wykorzystaniem stosu. Tzn robisz sobie liczba modulo 10, w ten sposób wyciagasz ostatnią cyfrę, potem liczba/10 żeby tą cyfrę "odciąć" i

  • albo wrzucasz to na stos i dzielisz dalej aż liczba==0, a potem wypisujesz zdejmując po kolei ze stosu (czyli wypiszesz odwrotnie do kolejności wrzucania, czyli tak jak chcesz).
  • albo wywołujesz tą samą funkcję dopóki liczba==0, a za instrukcja wywołujacą funkcję masz wypisanie cyfry, w ten sposób cyfry wypiszą sie w odwrotnej kolejnosci, czyli tak jak chcesz
0

hej czy ktoś mógłby poprawić mi ten program:

#include <iostream>
#include<math.h>

using namespace std;

int main()
{
    int x, cyfra=0,liczba=0,licznik=0,potega=0;
    cout<<"wprowadz cyfre"<<endl;
    cin>>x;
    liczba=x;
    do{
        cyfra=x%10;
        x=x/10;
        licznik++;
    }while(x!=0);
    //cout<<"ilosc cyfr w liczbie"<<licznik<<endl;
    while(licznik>0){
    if(licznik == 1)
    {
    cout<<"-------------------------------------"<<endl;
    cout<<"kiedy licznik =1"<<endl;
    potega=pow(10,licznik);
    liczba=liczba%potega;
    cout<<"wynik "<<liczba<<endl;
    cout<<"-------------------------------------"<<endl;
    }
    else if(licznik!=1)
    {    
         cout<<"-------------------------------------"<<endl;
         licznik--;
         potega=pow(10,licznik);
         cout<<"licznik potegi"<<licznik<<endl;
         cout<<"liczba z potegowana"<<potega<<endl;
         cout<<"wynik "<<liczba/potega<<endl;
         liczba=(liczba%potega);
         cout<<"liczba podzielona przez modulo"<<liczba<<endl;
         cout<<"-------------------------------------"<<endl;
         licznik++;
    }
    licznik--;
    };
    system("PAUSE");
    return 0;
}

bo męcze sie z tym już z pół dnia :/ z góy wielkie dzięki

0
#include <iostream>
#include <cmath>
#include <stack>

using namespace std;

int main()
{
    int x, cyfra,liczba,licznik;
    cyfra=liczba=licznik=0;
    stack<int> stos;
    cout << "wprowadz liczbe" << endl;
    cin >> x;
    liczba = x;
    
    do{
        cyfra = x%10;
	stos.push(cyfra);
        x/=10;
        licznik++;
    }while(x!=0);
    
    while(licznik--)
    {
      cout << stos.top() << ' ';
      stos.pop();
    }
    system("PAUSE");
    return 0;
}
0

a czy dałoby rade zrobić to bez stosu ?

0

Odwróć liczbę?

0

liczbę możesz odwrócić tak;

y=0; // odwrócona liczba, przed odwróceniem liczba jest przechowywana w zmiennej x
while(x!=0)
{
   cyfra = x % 10;
   x = x %10;
   y = 10*y + cyfra;
}
0

rozbić ją na cyfry tak jak pokazywałem to w pierwszym poście;)

0

Chyba się nie rozumiemy, masz wpierw odwrócić, a potem zastosować swój sposób z pierwszego postu.
Jeżeli x=327, to y=723 i jak wypisujesz od końca cyfry liczby y, to wypisujesz od początku cyfry liczby x.

0

a na to tak rzeczywiscie najpierw ja moge odwrócić raz a potem drugi :) że Ja na to nie wpadłem. Dzięki za podpowiedz :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1