Problem z podzieleniem liczby na cyfry
Ostatnio zmodyfikowano 2014-03-09 16:19
domin568 Temat założony przez niniejszego użytkownika |
Problem z podzieleniem liczby na cyfry » 2014-03-09 15:29:30 Witam, piszę program który ma między innymi dzielić liczbę na cyfrę. Robi to prawie dobrze, bo ostatnia cyfra jaką oddzielił od liczby zamiast 1 jest równa 8 … nie mam pojęcia dlaczego. Dla liczby 12345678901 przekształca ją na takie cyfry 10987654328 (mój algorytm robi to od tyłu ale to nie problem) tutaj mój kod : #include <vector> #include <iostream>
long long potega( int liczba, int wykladnik ) { if( wykladnik == 1 ) { return liczba; } int tmp = liczba; for( int i = 1; i < wykladnik; i++ ) { liczba = liczba * tmp; } return liczba; }
int main( int argc, const char * argv[] ) { int iloscPrzypadkow; std::vector < long long int > numerPesel; std::vector < int > cyfryPesel; long long int tmpNumerPesel; std::cin >> iloscPrzypadkow; for( int i = 0; i < iloscPrzypadkow; i++ ) { std::cin >> tmpNumerPesel; numerPesel.push_back( tmpNumerPesel ); for( int j = 0; j < 11; j++ ) { if( j == 0 ) { cyfryPesel.push_back( numerPesel[ i ] % 10 ); } else { cyfryPesel.push_back(( numerPesel[ i ] / potega( 10, j ) ) % 10 ); } std::cout << cyfryPesel[ j ] << std::endl; } } return 0; }
|
|
Admixior |
» 2014-03-09 16:19:13 Może i funkcja "potega" zwraca long long, ale co z tego skoro w środku przeliczas nie na long long tylko na zwykłym int. Masz 1 z dwóch możliwości 1. poprawić funkcję potęgi tak żeby wszystko na czym liczysz było long long 2. zamiast za każdym razem to przeliczać to od razu zapisujesz wynik do zmiennej tymczasowej for( int j = 0; j < 11; j++ ) { cyfryPesel.push_back( tmpNumerPesel % 10 ); tmpNumerPesel /= 10; std::cout << cyfryPesel[ j ] << std::endl; }
|
|
« 1 » |