[C++]rozbijanie liczb całkowitych

diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++]rozbijanie liczb całkowitych

Post autor: diego_maradona »

Powiedzmy że mam w programie zadeklarowaną zmienną typu int

Kod: Zaznacz cały

int number = 84515259 
Co zrobić, żeby pobrać pierwszą cyfrę do zmiennej firstDigit?
abc666

[C++]rozbijanie liczb całkowitych

Post autor: abc666 »

Pierwszą tzn. pierwszą z lewej czy z prawej?
diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++]rozbijanie liczb całkowitych

Post autor: diego_maradona »

Z lewej.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++]rozbijanie liczb całkowitych

Post autor: Afish »

1. Zrzutować na stringa / cstringa i wyciągnąć pierwszy znak
2. Dzielić przez 10 aż do otrzymania zera. Wtedy ostatnia niezerowa liczba jest tą poszukiwaną.
abc666

[C++]rozbijanie liczb całkowitych

Post autor: abc666 »

Jeśli to nie jest jakiś kluczowy element algorytmu to można np. tak

Kod: Zaznacz cały

int first = number;
while(first>10) first /= 10;
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++]rozbijanie liczb całkowitych

Post autor: Afish »

abc666, nie zadziała dla liczb ujemnych.
abc666

[C++]rozbijanie liczb całkowitych

Post autor: abc666 »

Szczegóły :p
Xitami

[C++]rozbijanie liczb całkowitych

Post autor: Xitami »

Kod: Zaznacz cały

while( first>9 ) first /=10;
Ostatnio zmieniony 8 wrz 2011, o 19:40 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
adambak
Użytkownik
Użytkownik
Posty: 1272
Rejestracja: 8 sty 2011, o 18:18
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 295 razy
Pomógł: 115 razy

[C++]rozbijanie liczb całkowitych

Post autor: adambak »

funkcja ... o/sprintf/
załatwi sprawę, pierwszy znak tablicy charów to będzie szukana cyfra..
Xitami

[C++]rozbijanie liczb całkowitych

Post autor: Xitami »

Kod: Zaznacz cały

unsigned int firstdigit(unsigned int n) {
 if(100000<=n)
  if(100000000<=n)
   if(1000000000<=n) return n/=1000000000;
   else return n/=100000000;
  else
   if(10000000<=n) return n/=10000000;
   else
    if(1000000<=n) return n/=1000000;
    else return n/=100000;
 else
  if(1000<=n)
   if(10000<=n) return n/=10000;
   else return n/=1000;
  else
   if(100<=n) return n/=100;
   else
    if(10<=n) return n/=10;
    else return n;
}
by było czytelniej wersja bardziej zwięzła

Kod: Zaznacz cały

#define         _0      /10;
#define         _7      _0 else
#define         _8      <=n)
#define         _9      return n/=
#define         _1      int firstdigit(unsigned int n) {if(
#define         _2      _8 if(
#define         _3      _8 _9
#define         _4      _7 _9
#define         _5      _7 if(
#define         _6      _0}//

_1 100000 _2 100000000 _2 1000000000 _3 10000000000 _4 1000000000 _5 10000000 _3 100000000 _5 1000000 
_3 10000000 _4 1000000 _5 1000 _2 10000 _3 100000 _4 10000 _5 100 _3 1000 _5 10 _3 100 _4 10 _6
diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++]rozbijanie liczb całkowitych

Post autor: diego_maradona »

Afish pisze:1. Zrzutować na stringa / cstringa i wyciągnąć pierwszy znak
2. Dzielić przez 10 aż do otrzymania zera. Wtedy ostatnia niezerowa liczba jest tą poszukiwaną.
Ta pierwsza metoda wydaje się dużo łatwiejsza
Xitami

[C++]rozbijanie liczb całkowitych

Post autor: Xitami »

Kod: Zaznacz cały

O11(O1l)<%return O1l/*->*/>011?O11(O1l/(011+'/'/'/')):O1l;%>
 
main(d){
        for(d=10; d<1000; d+=d/10)
                printf("%3d %d\n", d, O11(d));
}
działanie można sprawdzić dzięki
ODPOWIEDZ