博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2的次幂表示
阅读量:5261 次
发布时间:2019-06-14

本文共 1287 字,大约阅读时间需要 4 分钟。

问题描述

  任何一个正整数都可以用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;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        solve(n);        System.out.println();    }    static void solve(int n){        int [] a = new int[16];        int num = 0;        while (n!=0){            int x = (int)(Math.log(n)/Math.log(2));//求幂指数            n = n - (int)Math.pow(2,x);            a[num++] = x;        }        for(int j = 0;j
2){ System.out.print("2("); solve(a[j]); System.out.print(")"); } if(j!=num-1){ System.out.print("+"); }; } }}

 

转载于:https://www.cnblogs.com/zhanghaijie/p/8511641.html

你可能感兴趣的文章
2.Redis常用命令
查看>>
OOD沉思录3 类和对象的关系--使用关系
查看>>
构思一套自己的验证框架
查看>>
css3文本字体
查看>>
ListView在异步加载动态图片时,往往最后一项或几项被遮盖(IM场景居多)
查看>>
前端笔记4-1
查看>>
Oracle学习第三篇—多行函数
查看>>
阿里开源分布式事务解决方案 Fescar 全解析
查看>>
Day 9:双列集合Map及实现该接口的类的常用方法
查看>>
HDU 2852 KiKi's K-Number(树状数组+二分搜索)
查看>>
VirtualBox中使用ubuntu-16.04.1安装devstack的Controller节点
查看>>
【Python3之迭代器,生成器】
查看>>
打飞机游戏【来源于Crossin的编程教室 http://chuansong.me/account/crossincode 】
查看>>
spring AOP
查看>>
LSTM基础
查看>>
iOS 网络请求--- 配置info.plist文件
查看>>
ArcGIS10.3+Oracle12C+ArcGIS Server10.3安装布署(之二)
查看>>
如何处理遇到的错误-lammps
查看>>
javascript实现点击图片文件名预览图片和修改功能
查看>>
C++的const类成员函数
查看>>