Strona 1 z 1

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 16:47
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?

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 17:17
autor: abc666
Pierwszą tzn. pierwszą z lewej czy z prawej?

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 17:31
autor: diego_maradona
Z lewej.

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 18:02
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ą.

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 18:05
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;

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 18:10
autor: Afish
abc666, nie zadziała dla liczb ujemnych.

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 18:23
autor: abc666
Szczegóły :p

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 19:31
autor: Xitami

Kod: Zaznacz cały

while( first>9 ) first /=10;

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 19:38
autor: adambak
funkcja ... o/sprintf/
załatwi sprawę, pierwszy znak tablicy charów to będzie szukana cyfra..

[C++]rozbijanie liczb całkowitych

: 8 wrz 2011, o 20:50
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

[C++]rozbijanie liczb całkowitych

: 10 wrz 2011, o 14:07
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

[C++]rozbijanie liczb całkowitych

: 10 wrz 2011, o 17:42
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