Видимо, для кодирования отрицательных чисел используется прямой код: записывается минус и затем просто двоичное представление модуля числа.
Алгоритм перевода: разбиваем двоичные цифры на группы по 3 (начиная справа) и переводим каждую группу отдельно.
Код (Python 3):
N = input()
sign = ""
if N[0] == "-":
sign = "-"
N = N[1:]
oct_reversed = ""
while len(N) > 0:
N, last_triplet = N[:-3], N[-3:]
oct_digit = 0
while len(last_triplet) > 0:
oct_digit *= 2
if last_triplet[-1] == "1":
oct_digit += 1
last_triplet = last_triplet[:-1]
oct_reversed += str(oct_digit)
oct = sign + oct_reversed[::-1]
print(oct)
Пример ввода:
-1110010
Пример вывода:
-132
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
using namespace std;
int main () {
int n, numMin = 0, p = 0;
cin >> n;
vector <int> num(n);
for (int i = 0; i < n; i++)
cin >> num[i];
for (int i = 0; i < n; i++) {
int rav = 0;
for (int i = p; i < n; i++) {
if (num[numMin] == num[i]) {
rav++;
}
if (rav == 1) {
cout << num[numMin] << " ";
numMin++;
p++;
return 0;
На вход получаю:
1 3 3 3 2
На выход получаю:
1 3 2 (вместо 1 2)
Объяснение:
Видимо, для кодирования отрицательных чисел используется прямой код: записывается минус и затем просто двоичное представление модуля числа.
Алгоритм перевода: разбиваем двоичные цифры на группы по 3 (начиная справа) и переводим каждую группу отдельно.
Код (Python 3):
N = input()
sign = ""
if N[0] == "-":
sign = "-"
N = N[1:]
oct_reversed = ""
while len(N) > 0:
N, last_triplet = N[:-3], N[-3:]
oct_digit = 0
while len(last_triplet) > 0:
oct_digit *= 2
if last_triplet[-1] == "1":
oct_digit += 1
last_triplet = last_triplet[:-1]
oct_reversed += str(oct_digit)
oct = sign + oct_reversed[::-1]
print(oct)
Пример ввода:
-1110010
Пример вывода:
-132
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
using namespace std;
int main () {
int n, numMin = 0, p = 0;
cin >> n;
vector <int> num(n);
for (int i = 0; i < n; i++)
cin >> num[i];
for (int i = 0; i < n; i++) {
int rav = 0;
for (int i = p; i < n; i++) {
if (num[numMin] == num[i]) {
rav++;
}
}
if (rav == 1) {
cout << num[numMin] << " ";
}
numMin++;
p++;
}
return 0;
}
На вход получаю:
5
1 3 3 3 2
На выход получаю:
1 3 2 (вместо 1 2)
1
Объяснение: