上海计算机学会2021年3月月赛C++乙组T1平衡三进制
平衡三进制是一种特殊的三进制系统,其基数为3,并采用-z、0、+1(分别用z、0、1表示)来表示每一位数字。与传统三进制不同的是,在此系统中用字母z代替了通常意义上的-1。这种特殊设计使得该系统具有以下显著优点:无论处理正整数还是负整数,每个整数值都有且仅有一种唯一表示方式;而无需使用负号即可表达负数值。这种特性使得平衡三进制在某些计算领域(如计算机科学和光子计算)中具有潜在的应用价值。
此外,在编程实现方面,可以通过递归算法来实现将十进制整数值转化为相应的平衡三进制字符串形式。例如:
输入7时输出"1z1";
输入-3时输出"z0";
输入-71时输出"z0101";
这些实例展示了该算法如何根据余数情况调整数值并生成相应的符号序列以达到正确的平衡三进制表示形式。
题目描述
平衡三进制作为一种特殊的三进制形式,在其设计中采用了独特的数字表示方法。为了避免书写上的不便,在数字位上使用 -1、0、1 这三个符号来替代常规的 -0.5 等数值。值得注意的是,在实际应用中为了简化运算流程和提高效率,在数字位上使用 -1、0、1 这三个符号来替代常规的 -0.5 等数值。俄罗斯的研究人员曾在计算机系统中实现这一技术方案,并在解决特定数学问题时展现出显著的效果;在光子计算机领域的相关研究中也被成功应用。例如,在解决特定数学问题时展现了显著的效果;在光子计算机领域的相关研究中也被成功应用。

这种特殊进制的优点是:
- 不论正负,任何整数都有且只有一种表示方法;
 - 表示负数不用负号 
-。 
对于任意用十进制书写形式表示的整数n,请其转换为平衡三进制表达式,并确保结果中没有前导零。
输入格式
单个整数:表示 n。
输出格式
单个字符串:表示 n 的平衡三进制表示。
数据范围
- 对于 50% 的数据,−100≤n≤100;
 - 对于 100% 的数据,−109≤n≤109。
 
样例数据
输入:
7
输出:
1z1
输入:
-3
输出:
z0
输入:
-71
输出:
z0101
解析:根据除3的余数分类讨论。
详见代码:
 #include <bits/stdc++.h>
    
 using namespace std;
    
 int a[1005];
    
  
    
 int f(int x) {//递归输出最后一位
    
     if (x == 0) {
    
     return 0;
    
     }
    
     if (x % 3 == 2) {//余2即为-1
    
     f((x + 1) / 3);//补上再除3
    
     cout << 'z';
    
     } else if (x % 3 == -1) {
    
     f(x / 3);
    
     cout << 'z';
    
     } else if (x % 3 == -2) {//余-2即为1
    
     f(x / 3 - 1);//补上再除3
    
     cout << '1';
    
     } else {//余0和余1的情况
    
     f(x / 3);
    
     cout << x % 3;
    
     }
    
     return 0;
    
 }
    
  
    
 int main() {
    
     int n;
    
     cin >> n;
    
     if (n == 0) {
    
     cout << '0';
    
     } else {
    
     f(n);
    
     }
    
     return 0;
    
 }
        