• 算法笔记_058:蓝桥杯练习 2的次幂表示(Java)


    目录

    1 问题描述

    2 解决方案

     


    1 问题描述

    问题描述
      任何一个正整数都可以用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)
    提示
      用递归实现会比较简单,可以一边递归一边输出

    2 解决方案

    具体代码如下:

    package com.liuzhen.systemExe;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Main{
        
        public ArrayList<Integer> get10To2(int n) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            int count = 0;
            while(n > 0) {
                int temp = n % 2;
                if(temp == 1)
                    list.add(count);
                n = n / 2;
                count++;
            }    
            return list;
        }
        
        public void printResult(int n) {   
            if(n == 0)
                System.out.print("0");
            ArrayList<Integer> list = get10To2(n);
            for(int i = list.size() - 1;i >= 0;i--) {
                System.out.print("2");
                if(list.get(i) != 1) {
                    System.out.print("(");
                    printResult(list.get(i));
                    System.out.print(")");
                }
                if(i != 0)
                    System.out.print("+");
                
            }
        }
        
        public static void main(String[] args){
            Main test = new Main(); 
            Scanner in = new Scanner(System.in);
            //System.out.println("请输入一个整数n:");
            int n = in.nextInt();
            test.printResult(n);
        }
    }

    运行结果:

    请输入一个整数n:
    137
    2(2(2)+2+2(0))+2(2+2(0))+2(0)
    
    
    请输入一个整数n:
    12
    2(2+2(0))+2(2)

     

  • 相关阅读:
    通用权限管理设计 之 数据库结构设计
    jQuery LigerUI 插件介绍及使用之ligerDateEditor
    jQuery LigerUI 插件介绍及使用之ligerTree
    jQuery LigerUI V1.01(包括API和全部源码) 发布
    jQuery liger ui ligerGrid 打造通用的分页排序查询表格(提供下载)
    jQuery LigerUI V1.1.5 (包括API和全部源码) 发布
    jQuery LigerUI 使用教程表格篇(1)
    jQuery LigerUI V1.0(包括API和全部源码) 发布
    jQuery LigerUI V1.1.0 (包括API和全部源码) 发布
    nginx keepalived
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6497605.html
Copyright © 2020-2023  润新知