我的目标是将一个十进制数转换为平衡三元数。转换从十进制到不平衡三元只需要除以3和保持残差的跟踪。一旦我有了这个数字的不平衡三元表示法,我似乎就找不出如何“平衡”它。
例如:十进制15在不平衡三元中为120,在平衡三元中为+-0。从120到+-0怎么走?我不知道如何处理不平衡三元表示法中的2s。
谢谢!
发布于 2014-10-20 03:59:34
注意,三元中的2是+-在平衡三元中,或在小数点2=3- 1中。因此,如果您从一个填充了0、1s和2s的数组开始,只需用a-1替换每2一个,然后在其左边的数字中添加1。(确保在数字的开头有一个额外的0,至少如果它以2开头。)根据您的替换方式,您可能还需要用0替换3s,并像往常一样向左边添加1。然后重复这个过程,直到没有更多的2s (或3s)。
发布于 2015-05-28 16:01:03
查看它的一种方法是,如果得到一个余数2和x的剩余商,它就相当于得到-1的余数和x+1的剩余商数。
然后,将其转换为三元基,只需一次额外的检查。
String output="";
while (n>0) {
rem = n%3;
n = n/3;
if (rem == 2) {
rem = -1;
n++;
}
output = (rem==0?'0':(rem==1)?'+':'-') + output;
}正在运行的程序可以找到这里。
发布于 2019-10-04 18:08:51
因为我在网上错过了这个,我自己在巴黎/大奖赛的计时器-
{balanced_ternary(x,maxdigits=20,chars=["y","0","1"])=my(res,st,dez,dig);
dez=floor(log(abs(2*x))/log(3));
res=x/3^dez;
st="";
for(k=0,maxdigits,
if(k==dez+1,st=Str(st,"."));
dig = if(res>1/2
,res--;chars[2+1]
,if(res<-1/2
,res++;chars[2-1]
,chars[2+0]
));
st=Str(st,dig);res*=3
);
return(st);}然后
balancedternary (1) \\ %1002 = "1.00000000000000000000"
balancedternary (-1) \\ %1003 = "y.00000000000000000000"
balancedternary (1.2) \\ %1004 = "1.1yy11yy11yy11yy11yy1"
balancedternary (-1.2) \\ %1005 = "y.y11yy11yy11yy11yy11y"
balancedternary (27-3) \\ %1006 = "10y0.00000000000000000"
balancedternary (400) \\ %1007 = "1yy0y11.00000000000000"
balancedternary (sqrt(3)) \\ %1008 = "1y.y1yy10y0000yy1100y0"
balancedternary (sqrt(3)/3) \\ %1009 = "1.yy1yy10y0000yy1100y0"只是q&d,不是所有的“特殊情况”检查/编码。
https://stackoverflow.com/questions/26456597
复制相似问题