写出compare方法,转换后的36进制如果不够三位,则在前方补0,用c++实现
时间: 2023-12-09 15:02:25 浏览: 75
好的,这里是一个C++实现的compare方法,用于比较两个Base36类型的实例的大小关系。如果实例a的值大于实例b的值,则返回1;如果实例a的值小于实例b的值,则返回-1;如果实例a的值等于实例b的值,则返回0。同时,我们还添加了一个to_3_digits方法,用于将转换后的36进制数补齐到3位数。
```c++
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class Base36 {
public:
string to_base_36(int decimal) {
if (decimal == 0) {
return "0";
}
string res = "";
while (decimal > 0) {
int remainder = decimal % base;
decimal /= base;
res = chars[remainder] + res;
}
return to_3_digits(res);
}
int from_base_36(string s) {
int res = 0;
int n = s.length();
for (int i = 0; i < n; i++) {
int digit = 0;
if (s[i] >= '0' && s[i] <= '9') {
digit = s[i] - '0';
} else if (s[i] >= 'A' && s[i] <= 'Z') {
digit = s[i] - 'A' + 10;
}
res += digit * pow(base, n - 1 - i);
}
return res;
}
int compare(string a, string b) {
int decimal_a = from_base_36(a);
int decimal_b = from_base_36(b);
if (decimal_a > decimal_b) {
return 1;
} else if (decimal_a < decimal_b) {
return -1;
} else {
return 0;
}
}
private:
int base = 36;
string chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string to_3_digits(string s) {
int n = s.length();
if (n < 3) {
string zeros(3 - n, '0');
return zeros + s;
}
return s;
}
};
int main() {
Base36 b36;
string a = "1A";
string b = "ZZZ";
int cmp = b36.compare(a, b);
cout << "a and b comparison result: " << cmp << endl; // Output: a and b comparison result: -1
return 0;
}
```
在这个实现中,我们添加了一个to_3_digits方法,它接受一个字符串作为参数,并将其转换为3位数的字符串。如果字符串长度小于3,则在前面添加零。这样可以确保我们的转换结果始终是3位数,便于比较。
阅读全文