-
Notifications
You must be signed in to change notification settings - Fork 0
/
binary_array.cpp
58 lines (50 loc) · 1.02 KB
/
binary_array.cpp
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
/*
* Created by Yasunori Horii on 2019/03/09.
*/
#include <stdlib.h>
#include "binary_array.h"
static int ctoi(char c) {
switch (c) {
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
default:
return 0;
}
}
std::vector<int> to_binary_vector(mpz_class seed) {
auto str = seed.get_str(2);
std::vector<int> dest;
for (char c : str) {
dest.push_back(ctoi(c));
}
return dest;
}
std::vector<int> to_mutual_opposite_form(mpz_class seed) {
auto tmp = to_binary_vector(std::move(seed));
auto length = tmp.size();
std::vector<int> ternaryArray = std::vector<int>(length + 1);
ternaryArray[0] = tmp[0];
for (int i = 1; i < length; ++i) {
ternaryArray[i] = tmp[i] - tmp[i - 1];
}
ternaryArray[length] = -tmp[length - 1];
return ternaryArray;
}