szukanie zaawansowane
 [ Posty: 5 ] 
Autor Wiadomość
Mężczyzna Offline
PostNapisane: 6 sty 2011, o 22:47 
Użytkownik

Posty: 4
Pierwsze chciałbym się przywitać, z racji tego, że jest to mój pierwszy post na tym forum. ;)
Mam pewien kłopot, mianowicie piszę właśnie pewną aplikację(w C++), w której potrzebuję odczytać jaka cyfra w liczbie stoi na podanym miejscu(1 - cyfra jednostek, 2 - cyfra dziesiątek itd.).
Na razie moja funkcja jest pusta, ma tylko inicjację, wygląda tak:
Kod:
1
2
3
4
int odczytajCyfre(int liczba, int pozycja){

}

Nie mam żadnego pomysłu w jaki sposób mogę to obliczyć, w google nic nie znalazłem na ten temat. Bardzo proszę o pomoc, nawet jeżeli ktoś nie będzie w stanie podać kodu, przyda mi się chociaż sam sposób tego obliczenia.

Pozdrawiam, Andrzej Golonka

PS: Jeżeli będzie to potrzebne, to wcześniej już zrobiłem funkcję, która liczy ilość cyfr. Oto ona:
Kod:
1
2
3
4
5
6
int ileCyfr(int liczba){
   int cyfry=1;
   while( (liczba/=10) != 0 )
      cyfry++;
   return cyfry;
}
Góra
Kobieta Offline
PostNapisane: 6 sty 2011, o 23:01 
Użytkownik
Avatar użytkownika

Posty: 3764
Lokalizacja: Łódź
Jak wiesz ile cyfr ma liczba np. n cyfr to dziel ją kolejno przez 10 do potęgi n-1 i weź cechę (całość) z wyniku - ta cecha to cyfra stojca na n-tym miejscu od prawej strony. Potem od tej liczby odejmij iloczyn tej cechy przez tę potęgę i podziel wynik przez 10 do n-2 itd.
Np. liczba 357:
357 : 100= 3,57 to 3 stoi na 3 miejscu od prawej
57 : 10= 5,7 to 5 stoi na 2 miejscu od prawej
7 stoi na 1 miejscu od prawej
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2011, o 10:03 
Użytkownik

Posty: 4
Bardzo dziękuję Ci za pomoc.
Zamieszczam funkcję, gdyż może się przydać komuś.
Kod:
1
2
3
4
5
6
7
8
9
10
int odczytajCyfre(int liczba, int pozycja){
   int tmp=liczba;
   int help;
   for(int i=1; i<=ileCyfr(tmp); i++){   
      if(pozycja==i) {liczba=floor(liczba/pow(double(10), ileCyfr(liczba)-1)); break;}
      help=floor(liczba/pow(double(10), ileCyfr(liczba)-1));
      liczba-=pow(double(10), ileCyfr(liczba)-1)*help;
   }
   return liczba;
}
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2011, o 18:08 
Użytkownik

Posty: 30
Lokalizacja: ///
Możesz ewentualnie spróbować takiej funkcji:
Kod:
1
2
3
4
5
6
7
8
9
10
11
int odczytajCyfre(int liczba, int pozycja)
{
    std::ostringstream oss;
    oss << liczba;
    std::string sLiczba = oss.str();
    sLiczba = sLiczba[pozycja];
    std::istringstream iss(sLiczba);
    iss >> liczba;
    return liczba;
}

Będzie prawdopodobnie szybsza i prościej wygląda.
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2011, o 19:06 
Użytkownik

Posty: 4
Sprytnie.. Zamiana na ciąg znaków... Dziękuję Ci za pomoc
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 5 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 liczby pierwsze  Anonymous  4
 metody numeryczne na liczenie rzedu macierzy ?!?  Anonymous  2
 ZAMIANA systemow liczbowych, liczby niecalkowite.  bisz  1
 Liczby binarne...wartosci po przecinku  moczul  5
 dziwne liczby ?  vip_9999_vip  5
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) ParaRent.com