我昨天参加编程之美初赛,遇到一道题,我用的算法其中一步要将十进制转换为平衡三进制。但是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;
    }

希望大神能讲解下算法~

或者有改进的建议也行~

posted on 2016-04-25 14:42  Gsllchb  阅读(1538)  评论(0)    收藏  举报