平衡三进制
也称为对称三进制。数字由 -1, 0, 1 构成的。
模版
先将十进制转化为普通三进制,再从低位开始,遇到 2 则 改为 -1 且将下一位 +1,遇到 3 则 改为 0 且将下一位 + 1
| C++ |
|---|
| int n;
cin >> n;
bool sign = true;
if (n < 0) {
sign = false;
n = -n;
}
vector<int> nums;
int temp = n;
while (temp) {
nums.emplace_back(temp % 3);
temp /= 3;
}
nums.emplace_back(0);
int len = nums.size();
for (int i = 0 ; i < len ; i++) {
if (nums[i] == 3) {
nums[i] = 0;
nums[i + 1]++;
} else if (nums[i] == 2) {
nums[i] = -1;
nums[i + 1]++;
}
}
reverse(begin(nums), end(nums));
if (sign == false) {
for (int i = 0 ; i < len ; i++) {
nums[i] = -nums[i];
}
}
bool has = false;
for (int i = 0 ; i < len ; i++) {
if (nums[i] == 0) {
if (has || i == len - 1) {
cout << nums[i] << " ";
}
} else {
has = true;
cout << nums[i] << " ";
}
}
|
例题
U313611 【模板】平衡三进制 - 洛谷