平衡三进制

平衡三进制,也称为对称三进制。这是一个不太标准的 计数体系。正规的三进制的数字都是由 $0,1,2$ 构成的,而平衡三进制的数字是由 $-1,0,1$ 构成的。它的基数也是 $3$(因为有三个可能的值)。由于将 $-1$ 写成数字不方便,我们将使用字母 Z 来代替 $-1$。

平衡三进制与其他进制的转换

从平衡三进制转换到其他进制

此处以从平衡三进制转换到十进制为例。

输出格式:在一行中输出对应的十进制数,应该是最简的带分数,必须满足 $C>1$。特别地,对于带分数形如 $A\frac{B}{C}$ 的输出的格式为 A B C(使用一个空格分隔);对于带分数形如 $\frac{B}{C}$ 的输出的格式为 B C(使用一个空格分隔);对于带分数形如 $A$ 的输出的格式为 A(使用一个空格分隔)。

#include<cstdio>
int ch;
long long a,b,c=1ll;
int main(){
	while(true){
		ch=getchar();
		if(ch<48||ch>50)break;
		a*=3ll;
		if(ch==49)a++;
		else if(ch==90)a--;
	}
	if(ch!=46){
		printf("%lld",a);
		return 0;
	}
	while(true){
		ch=getchar();
		if(ch<48||ch>50)break;
		b*=3ll,c*=3ll;
		if(ch==49)b++;
		else if(ch==90)b--;
	}
	while(b!=0&&b%3==0)b/=3,c/=3; 
	if(a>0&&b<0)a--,b+=c;
	else if(a<0&&b>0)a++,b=c-b;
	else if(a<0&&b<0)b=-b;
	if(a!=0)printf("%lld ",a);
	if(c!=1)printf("%lld %lld",b,c);
	return 0;
}

从其他进制转换到平衡三进制

尚未完成。