Liczenie wartości podanej cyfry z liczby

Wem
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 6 sty 2011, o 21:31
Płeć: Mężczyzna
Podziękował: 2 razy

Liczenie wartości podanej cyfry z liczby

Post autor: Wem »

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: Zaznacz cały

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: Zaznacz cały

int ileCyfr(int liczba){
	int cyfry=1;
	while( (liczba/=10) != 0 ) 
		cyfry++;
	return cyfry;
}
Awatar użytkownika
kropka+
Użytkownik
Użytkownik
Posty: 4389
Rejestracja: 16 wrz 2010, o 14:54
Płeć: Kobieta
Lokalizacja: Łódź
Podziękował: 1 raz
Pomógł: 787 razy

Liczenie wartości podanej cyfry z liczby

Post autor: kropka+ »

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
Wem
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 6 sty 2011, o 21:31
Płeć: Mężczyzna
Podziękował: 2 razy

Liczenie wartości podanej cyfry z liczby

Post autor: Wem »

Bardzo dziękuję Ci za pomoc.
Zamieszczam funkcję, gdyż może się przydać komuś.

Kod: Zaznacz cały

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;
}
mis02
Użytkownik
Użytkownik
Posty: 30
Rejestracja: 15 gru 2009, o 17:19
Płeć: Mężczyzna
Lokalizacja: ///
Podziękował: 6 razy
Pomógł: 3 razy

Liczenie wartości podanej cyfry z liczby

Post autor: mis02 »

Możesz ewentualnie spróbować takiej funkcji:

Kod: Zaznacz cały

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.
Wem
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 6 sty 2011, o 21:31
Płeć: Mężczyzna
Podziękował: 2 razy

Liczenie wartości podanej cyfry z liczby

Post autor: Wem »

Sprytnie.. Zamiana na ciąg znaków... Dziękuję Ci za pomoc
ODPOWIEDZ