zoukankan      html  css  js  c++  java
  • 算法训练 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)
    提示
      用递归实现会比较简单,可以一边递归一边输出
     1 import java.text.DecimalFormat;
     2 import java.text.NumberFormat;
     3 import java.util.ArrayList;
     4 import java.util.Scanner;
     5 import java.util.Stack;  
     6     public class Main{   
     7         public static void main(String[] args){ 
     8             Scanner input = new Scanner(System.in);
     9             int n = input.nextInt();
    10             f(n+"");
    11         }
    12         public static void f(String s){
    13             boolean flag = false;
    14             String temp = Integer.toBinaryString(Integer.parseInt(s));
    15             for(int i=0;i<temp.length();i++){
    16                 if(temp.charAt(i)=='1'){
    17                     if(i<temp.length()-3){
    18                         if(flag)
    19                             System.out.print("+");
    20                         System.out.print("2");
    21                         System.out.print("(");
    22                         f(temp.length()-i-1+"");
    23                         System.out.print(")");
    24                         flag = true;
    25                     }else{
    26                         if(flag)
    27                             System.out.print("+");
    28                         if(i==temp.length()-3){
    29                             System.out.print("2(2)");
    30                             flag = true;
    31                         }
    32                         if(i==temp.length()-2){
    33                             System.out.print("2");
    34                             flag = true;
    35                         }
    36                         if(i==temp.length()-1){
    37                             System.out.print("2(0)");
    38                             flag = true;
    39                         }
    40                         
    41                     }
    42                 }
    43             }
    44         }
    45  }  
  • 相关阅读:
    插入数据Oracle异常ORA-01502: 索引或这类索引的分区处于不可用状态
    关于分布式系统的数据一致性问题
    C#网络编程系列文章之Socket实现异步TCP服务器
    大型网站架构与分布式架构
    序列化表单为json
    学习wcf
    C# 知识梳理
    Java前端控制器模式
    Java策略模式
    Java责任链模式
  • 原文地址:https://www.cnblogs.com/lolybj/p/6520133.html
Copyright © 2011-2022 走看看