递归法,java版本

2的幂次方

http://www.nowcoder.com/questionTerminal/7cf7b0706d7e4b439481f53e5fdac6e7

思路:就是对137递归;然后对7,3,0递归;递归出口就是0,2
注意点:如果对1递归,输出的是"2",而不是"2(1)"

import java.math.BigInteger;
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int n = sc.nextInt();
            System.out.println(getNumber(n + ""));
        }
    }
    public static String getNumber(String str){

        //递归出口
        if(str.equals("0"))
            return "0";
        if(str.equals("2"))
            return "2";

        //将数转化为二进制数
        BigInteger bigInteger = new BigInteger(str, 10);
        str = bigInteger.toString(2);

        //找二进制数的对应数:7,3,0(又如7转化为二进制数的对应数为:2,1,0)
        int j = 0;
        String result = "";//结果
        for(int i = str.length() - 1; i >= 0; i--){//i代表7,3,0
            if(str.charAt(j) == '1'){
                if(str.length() - 2 == j) {//如果对应数为是1,输出"+2",而不是"+2(1)"
                    result = result + "+2";
                    j++;
                }
                else {
                    result = result + "+2(" + getNumber(i + "") + ")";
                    j++;
                }
            }
            else 
                j++;
        }

        result = result.substring(1, result.length());//去掉多的那个"+"号
        return result;
    }
}
全部评论

相关推荐

牛客48784610...:深圳的变成录用进行中,这个是稳了吗,还没有收到邮件
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务