我昨天参加编程之美初赛,遇到一道题,我用的算法其中一步要将十进制转换为平衡三进制。但是google了好久都没有找到Java实现的代码,我也有些急一时想不出转换的算法,也看不懂用C/C++写的算法。于是乎赛后我将一个用C/C++写的算法用Java改写,并做了些调整。
//十进制转换为平衡三进制(仅能输入正数)。T——-1,1——1.0——0。 public static StringBuffer convertBalancedTernary(int num){ StringBuffer result=new StringBuffer(); byte[] ter=new byte[21]; int lower=0, upper=0, index=0; do{ switch(num%3){ case 0: lower=upper; upper=0; break; case 1: lower=upper+1; upper=0; break; case 2: lower=upper-1; upper=1; break; default: return new StringBuffer("error:1"); } if(lower==2){ lower=-1; upper++; } ter[index++]=(byte)lower; num/=3; }while(num>0); if(upper==1) ter[index]=(byte)upper; else index--; for(int i=index; i>=0;i--){ switch(ter[i]){ case -1: result.append('T'); break; case 0: result.append('0'); break; case 1: result.append('1'); break; default: return new StringBuffer("error:2"); } } return result; }
希望大神能讲解下算法~
或者有改进的建议也行~
浙公网安备 33010602011771号