专栏首页AI那点小事算法训练 2的次幂表示

算法训练 2的次幂表示

问题描述   任何一个正整数都可以用2进制表示,例如:137的2进制表示为10001001。   将这种2进制表示写成2的次幂的和的形式,令次幂高的排在前面,可得到如下表达式:137=2^7+2^3+2^0   现在约定幂次用括号来表示,即a^b表示为a(b)   此时,137可表示为:2(7)+2(3)+2(0)   进一步:7=2^2+2+2^0 (2^1用2表示)   3=2+2^0   所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)   又如:1315=2^10+2^8+2^5+2+1   所以1315最后可表示为:   2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 输入格式   正整数(1<=n<=20000) 输出格式   符合约定的n的0,2表示(在表示中不能有空格) 样例输入 137 样例输出 2(2(2)+2+2(0))+2(2+2(0))+2(0) 样例输入 1315 样例输出 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 提示   用递归实现会比较简单,可以一边递归一边输出

import java.util.Scanner;

/*
 * 用数组保存二进制数中1的位置(从0开始)之后递归输出
 */
public class Main {

    public static void Handle(int N){
        int i = 0;
        int j = 0;
        int[] num = new int[100000];
        while(N > 0){
            int tmp = N % 2;
            if ( tmp == 1){
                num[j++] = i;
            }
            i++;
            N = N / 2;
        }
        j--;
        for ( int k = j ; k >= 0 ; k--){
            if ( num[k] == 0){
                System.out.print("2(0)");
            }else if ( num[k] == 1){
                System.out.print("2");
            }else if (num[k] == 2){
                System.out.print("2(2)");
            }else{
                System.out.print("2(");
                Handle(num[k]);
                System.out.print(")");
            }
            if ( k != 0){
                System.out.print("+");
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int N= in.nextInt();
        Handle(N);
        in.close();
    }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 1056. 组合数的和(15)

    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、5...

    AI那点小事
  • 数组变换

    牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等。问是否可行。 牛牛可以进行的操作是:将数组中的任意一个数改为这个数的两倍。 这个...

    AI那点小事
  • 历届试题 幸运数

    1 3 5 7 9 …. 。这时,3为第2个幸运数,然后把所有能被3整除的序号位置的数删去。注意,是序号位置,不是那个数本身能否被3整除!! 删除的应该是5,1...

    AI那点小事
  • Java 随机生成四则运算式并生成答案

    glm233
  • 肿瘤转移相关lncRNA数据库

    实验验证的数据库数据库其实和综述差不多。综述是基于一个主题检索相关文献,然后利用文字来进行来进行总结出这些文献的相关特点。而这类经过实验验证的数据库,第一步也是...

    医学数据库百科
  • Data Structure堆Tree并查集图论

    堆这种数据结构的应用很广泛,比较常用的就是优先队列。普通的队列就是先进先出,后进后出。优先队列就不太一样,出队顺序和入队顺序没有关系,只和这个队列的优先级相关,...

    西红柿炒鸡蛋
  • Java工具集-数学(质因数分解)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • keras的三种模型实现与区别说明

    序贯(sequential)API允许你为大多数问题逐层堆叠创建模型。虽然说对很多的应用来说,这样的一个手法很简单也解决了很多深度学习网络结构的构建,但是它也有...

    砸漏
  • 误删了公司数据库,但我还是活下来了!

    上周我与同事们进行了一次关于职业生涯中搞砸了一些事情的简短谈话。这确实会沦为他人笑柄,却更给我们带来了珍贵的教训。重要的是,我们应该分享那些曾经的错误,这样其他...

    马哥linux运维
  • 误删了公司数据库,但我还是活下来了!

    上周我与同事们进行了一次关于职业生涯中搞砸了一些事情的简短谈话。这确实会沦为他人笑柄,却更给我们带来了珍贵的教训。重要的是,我们应该分享那些曾经的错误,这样其他...

    马哥linux运维

扫码关注云+社区

领取腾讯云代金券