-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathBinarizeMe.cpp
More file actions
100 lines (79 loc) · 1.9 KB
/
Copy pathBinarizeMe.cpp
File metadata and controls
100 lines (79 loc) · 1.9 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
Äàíà ñòðîêà.
Òðåáóåòñÿ çàìåíèòü âñå öåëûå ïîëîæèòåëüíûå ÷èñëà â íåé íà äâîè÷íûå àíàëîãè (ïåðåâåñòè èç äåñÿòè÷íîé â äâîè÷íóþ ñèñòåìó ñ÷èñëåíèÿ).
Ôîðìàò ââîäà
Íà âõîä ïîäàåòñÿ ñòðîêà èç íå áîëåå 255 ñèìâîëîâ, ñðåäè êîòîðûõ ìîãóò áûòü è ïðîáåëüíûå.
Ãàðàíòèðóåòñÿ, ÷òî ÷èñëà â ñòðîêå íå íà÷èíàþòñÿ ñ 0.
Ïðèìåðû
192873a kjhfd129380
101111000101101001a kjhfd11111100101100100
6a8g923mx
110a1000g1110011011mx
*/
#include <iostream>
char divideAndRemainder(char* x) {
char carry = 0;
bool flag = false;
int pos = 0;
for (int i = 0; x[i] != 0; i++) {
char c = x[i] - '0';
x[pos] = (10 * carry + c) / 2 + +'0';
if (x[pos] != '0')
flag = true;
if (flag)
pos++;
carry = c % 2;
}
x[pos] = 0;
return carry + '0';
}
char* getBinary(char* x) {
char* result = new char[849];
int len = 0;
while (x[0] != 0) {
result[len++] = divideAndRemainder(x);
}
result[len] = 0;
for (int i = len / 2 - 1; i >= 0; i--) {
char c = result[len - i - 1];
result[len - i - 1] = result[i];
result[i] = c;
}
return result;
}
int main()
{
char str[256], digit[256], result[849]; // 848 - äëèíà äâîè÷íîãî âèäà ÷èñëà 10^256 - 1
std::cin.getline(str, 256);
int result_len = 0;
int digit_len = 0;
for (int i = 0; str[i] != 0; i++) {
if (isdigit(str[i])) {
digit[digit_len++] = str[i];
digit[digit_len] = 0;
}
else {
if (digit_len > 0) {
char* binary = getBinary(digit);
int index = 0;
while (binary[index]) {
result[result_len++] = binary[index++];
}
delete[] binary;
digit_len = 0;
}
result[result_len++] = str[i];
}
}
if (digit_len > 0) {
char* binary = getBinary(digit);
int index = 0;
while (binary[index]) {
result[result_len++] = binary[index++];
}
delete[] binary;
digit_len = 0;
}
result[result_len] = 0;
std::cout << result << std::endl;
}