Website Summary Files Commits Branches @commit @diff @stats
path: root / Week11 / Exercise06.cpp
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;
}