Jak dowiedzieć się czy w liczbie jest określona cyfra?

0

Chcę napisać program, który po wpisaniu przedziału (minimalna liczba, maksymalna liczba) wypisze wszystkie liczby, a te które są podzielne lub mają w sobie określoną cyfrę (w tym przypadku 9), zastąpi słowami ("podzielna przez 9" lub "ma w sobie 9"). Mam problem z określeniem czy liczba ma w sobie 9, nie wiem gdzie mam błąd...

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    int a,b;
    cin>>a>>b;
    int i=a;
    for(;i<=b;i++)
    {
        if(i%9==0) cout<<endl<<"podzielna przez 9";
        else
        {
            string bufor=to_string(i);
            int dlugosc=bufor.length();
            for(int h=0;h<dlugosc;h++) if(bufor[i]==9){cout<<endl<<"ma w sobie 9"; break;};
            cout<<endl<<i;
        }
    }
    return 0;
}
2

Musisz zamienić liczbę na tekst i szukać znaku '9'.

0

bufor[i]==9 błąd polega na tym że znak '9' nie ma wartości 9 a wartość 57. Zapoznaj sie z http://www.asciitable.com/

0
Shalom napisał(a):

bufor[i]==9 błąd polega na tym że znak '9' nie ma wartości 9 a wartość 57. Zapoznaj sie z http://www.asciitable.com/

No właśnie też o tym myślałem, ale to nic nie zmienia, tzn po wpisaniu 57 zamiast 9 nadal nie działa

1

A co z "zastąpi słowami". Czy ma wypisać ją słownie czyli np: zamiast 199 ma napisać "sto dziewięćdziesiąt dziewięć" ?

Wracając do samego wykrywania cyfry 9 to jak sformatujesz kod to szybko zobaczysz **DWA ** błędy w linii:

for(int h=0;h<dlugosc;h++) if(bufor[i]==9){cout<<endl<<"ma w sobie 9"; break;};

Jak to mówią po tych zmianach "u mnie działa":

screenshot-20201019230900.png

0
Azarien napisał(a):

Musisz zamienić liczbę na tekst i szukać znaku '9'.

katakrowa napisał(a):

A co z "zastąpi słowami". Czy ma wypisać ją słownie czyli np: zamiast 199 ma napisać "sto dziewięćdziesiąt dziewięć" ?

Wracając do samego wykrywania cyfry 9 to jak sformatujesz kod to szybko zobaczysz DWA błędy w linii:

for(int h=0;h<dlugosc;h++) if(bufor[i]==9){cout<<endl<<"ma w sobie 9"; break;};

Zmieniłem tą linijkę i nadal nie działa.
Jeśli liczba ma w sobie "9" to ma wypisać zamiast liczby "ma w sobie 9"

0
maks9906 napisał(a):

Zmieniłem tą linijkę i nadal nie działa.

Wynik Twojego kodu po poprawieniu DWÓCH błędów tylko we wskazanej linijce:

0                                                                                                                                                                                    
20                                                                                                                                                                                   
                                                                                                                                                                                     
podzielna przez 9                                                                                                                                                                    
1                                                                                                                                                                                    
2                                                                                                                                                                                    
3                                                                                                                                                                                    
4                                                                                                                                                                                    
5                                                                                                                                                                                    
6                                                                                                                                                                                    
7                                                                                                                                                                                    
8                                                                                                                                                                                    
podzielna przez 9                                                                                                                                                                    
10                                                                                                                                                                                   
11                                                                                                                                                                                   
12                                                                                                                                                                                   
13                                                                                                                                                                                   
14                                                                                                                                                                                   
15                                                                                                                                                                                   
16                                                                                                                                                                                   
17                                                                                                                                                                                   
podzielna przez 9                                                                                                                                                                    
ma w sobie 9                                                                                                                                                                         
19                                                                                                                                                                                   
20         
0
katakrowa napisał(a):
maks9906 napisał(a):
Azarien napisał(a):

Zmieniłem tą linijkę i nadal nie działa.

Wynik Twojego kodu po poprawieniu DWÓCH błędów tylko we wskazanej linijce:

0                                                                                                                                                                                    
20                                                                                                                                                                                   
                                                                                                                                                                                     
podzielna przez 9                                                                                                                                                                    
1                                                                                                                                                                                    
2                                                                                                                                                                                    
3                                                                                                                                                                                    
4                                                                                                                                                                                    
5                                                                                                                                                                                    
6                                                                                                                                                                                    
7                                                                                                                                                                                    
8                                                                                                                                                                                    
podzielna przez 9                                                                                                                                                                    
10                                                                                                                                                                                   
11                                                                                                                                                                                   
12                                                                                                                                                                                   
13                                                                                                                                                                                   
14                                                                                                                                                                                   
15                                                                                                                                                                                   
16                                                                                                                                                                                   
17                                                                                                                                                                                   
podzielna przez 9                                                                                                                                                                    
ma w sobie 9                                                                                                                                                                         
19                                                                                                                                                                                   
20         

mógłbyś pokazać co to za błędy?

2
maks9906 napisał(a):

mógłbyś pokazać co to za błędy?

Wierzę, że jak przeanalizujesz znaczek po znaczku to znajdziesz sam. Uwierz w swoje zdolności a satysfakcja będzie dużo większa.
W sumie masz dwa znaczki dopisać a jeden zmienić.

1
for(int h=0;h<dlugosc;h++) if(bufor[i]==9){cout<<endl<<"ma w sobie 9"; break;};
//                                  ^
//                                  |
//                                  +-- hmm?

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