-
Notifications
You must be signed in to change notification settings - Fork 0
/
baseConvert.cpp
58 lines (42 loc) · 1.05 KB
/
baseConvert.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
/*
Base Conversion
*/
#include <cstdlib>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int convert_to_decimal(const string & s, int b1, int & neg) {
int decimal = 0;
neg = (s[0] == '-');
for (int i = (neg ? 1:0); i < s.length(); ++i) {
char ch = s[i];
if (isdigit(ch)) {
decimal = decimal*b1 + ch-'0';
} else {
decimal = decimal*b1 + (ch-'A'+10);
}
}
cout<<"In decimal "<<decimal<<endl;
return decimal;
}
string convert_from_decimal(int decimal, int b2, int & neg) {
string ans;
while (decimal) {
int rem = decimal%b2;
ans.push_back((rem > 10)? rem - 10 + 'A' :'0'+rem);
decimal = decimal/b2;
}
if (neg) ans.push_back('-');
reverse(ans.begin(),ans.end());
return ans;
}
string convert_base(const string & s, const int b1, const int b2) {
int neg;
int decimal = convert_to_decimal(s, b1, neg);
return convert_from_decimal(decimal,b2, neg);
}
int main() {
cout<< convert_base("28",10,2)<<endl;
cout<<convert_base("AA", 16, 2);
}