Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z podzieleniem liczby na cyfry

Ostatnio zmodyfikowano 2014-03-09 16:19
Autor Wiadomość
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 :
C/C++
#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;
}
P-105926
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
C/C++
for( int j = 0; j < 11; j++ )
{
   
    cyfryPesel.push_back( tmpNumerPesel % 10 );
    tmpNumerPesel /= 10;
    std::cout << cyfryPesel[ j ] << std::endl;
}
P-105929
« 1 »
  Strona 1 z 1