blob: 82860d130833015f0bcc0cc5f3cf0abceeceb6ad (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <iostream>
int main() {
const unsigned MAX_LENGTH = 128;
char num[MAX_LENGTH];
std::cin.getline(num, MAX_LENGTH);
const char* digit = num + 2;
unsigned long number = 0;
while (*digit != '\0') {
// Когато разглеждахме операции с цифри (добавяне/премахване на цифра от число),
// тогава говорехме как с деление на 10 премаваме цифра и с умножение на 10 я
// добавяме в десния край на числото.
//
// Това работи, защото цифрите ни са в десетична бройна система. Ако работехме
// например с двоична, тогава щяхме да делим и умножаваме с 2, за да махаме/добавяме
// "цифри" в края на числото (да се има впредвид, че резултата ще е в 10тична бройна
// система).
//
// Аналогично, понеже работим с 16тична, правим операции с числото 16.
if ('0' <= *digit && *digit <= '9') {
number = number * 16 + (*digit - '0');
}
// А e 10, B е 11, ..., F е 15
else if ('A' <= *digit && *digit <= 'F') {
number = number * 16 + (*digit - 'A' + 10);
}
++digit;
}
std::cout << number << std::endl;
return 0;
}
|