działanie dodawania na stringach

2018-03-22 08:02

Rejestracja: 2 lata temu

Ostatnio: 8 miesięcy temu

0

Prosta funkcja zamieniająca liczbę-s w dowolnym b-systemie na int w systemie dziesiętnym (w zadaniu '-' przed liczbą oznacza jej ujemną wartość)
Opiera się na tym np:

121(4)=25(10)

oraz

1213(4)=25(10)⋅4(10)+3(10)=103(10).

(4) to liczba w systemie 4-kowym

Mam pytanie co do linijki wynik, rozumiem, że nie można po prostu dodać s[i], bo działania arytmetyczne nie działają na stringach, ale jak autor "przemycił" do wyniku dodawanie i-tej cyfry? Odjęcie znaku '0'? Może ktoś wytłumaczyć o co tam chodzi?

int zsystemu(string s, int b)
{ int wynik=0, i=0, znak=1;
if (s[0]=='-'){
znak=-1;
i=1;
}
int d=s.length();
for(;i<d;i++){
wynik=wynik*b+(s[i]-’0’);
}
return znak*wynik;
}
edytowany 2x, ostatnio: furious programming, 2018-03-22 12:36

Pozostało 580 znaków

2018-03-22 09:11

Rejestracja: 4 lata temu

Ostatnio: 2 dni temu

1

Odejmowanie offsetu. char tak jak int to typ całkowitoliczbowy. Ale char '0' nie jest równy int 0, ma inny zapis bitowy, gdyż nie jest kodowany jako 0x00. Trik polega na tym, że '0' - '0' to już jest int 0, '1- '0' to jest int 1, '2- '0' to jest int 2 i tak dalej, aż do 9.

edytowany 4x, ostatnio: nalik, 2018-03-22 09:17

Pozostało 580 znaków

2018-03-22 11:54

Rejestracja: 2 lata temu

Ostatnio: 8 miesięcy temu

0

Chyba rozumiem, ale tylko bardzo intuicyjnie. Czyli z odejmowania dwóch char'ów można uzyskać inta?

Pozostało 580 znaków

2018-03-22 11:59

Rejestracja: 6 lat temu

Ostatnio: 7 godzin temu

1

'0' to tak naprawdę liczba całkowita o kodzie 48. Wykonując operacje arytmetyczne na charach, wykonujesz operacje arytmetyczne na liczbach całkowitych im odpowiadającym. Okazuje się, że kolejnym cyfrom odpowiadają kolejne liczby całkowite - '0': 48, '1': 49, '2': 50 itd. Dlatego, jeśli od obecnego chara odejmiesz wartość 48, to dostaniesz cyfrę jako liczba, a nie jako znak.

Pozostało 580 znaków

2018-03-22 12:02

Rejestracja: 2 lata temu

Ostatnio: 8 miesięcy temu

0

Wszystko jasne, dzięki wam pięknie :D

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0