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.代码实现:——递归实现——Java 语言

import java.util.Scanner;
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc=new Scanner(System.in);System.out.println(fun(sc.nextInt()));}private static String fun(int n){int sum=0;String result="";for(int i=15;i>=0;i--){int temp=(int)Math.pow(2,i);if(sum+temp<n){sum+=temp;String tempStr;if (i == 0) {tempStr = "2(0)";} else if (i == 1) {tempStr = "2";} else if (i == 2) {tempStr = "2(2)";}else{tempStr = "2("+fun(i)+")";}result+=(tempStr+"+");}else if(sum+temp==n){sum+=temp;String tempStr;if (i == 0) {tempStr = "2(0)";} else if (i == 1) {tempStr = "2";} else if (i == 2) {tempStr = "2(2)";}else{tempStr = "2("+fun(i)+")";}result+=tempStr;break;}}return result;}
}

代码实现——C语言

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>void fun(int n)
{int s = 1;//2的次方的值int t = 0;//指数if (n == 1)//若是1则直接输出{printf("2(0)");return;}if (n == 2)//若是2则直接输出{printf("2");return;}while (s <= n)//通过不断s*2找出大于n时的指数{s = s * 2;t++;}t = t - 1;if (n == s / 2)           //n刚好为2的某次方的值{printf("2(");fun(t);            //进一步计算指数printf(")");}else                //计算剩下的值{if (s / 2 == 2){printf("2");printf("+");fun(n - s / 2);}else{printf("2(");fun(t);printf(")+");fun(n - s / 2);}}
}int main()
{int n, x = 0;while (x == 0){printf("请输入整数:");scanf("%d", &n);fun(n);printf("是否继续?(0/1)");scanf("%d", &x);}return 0;
}

【Java】——2的次幂表示(C和Java实现)相关推荐

  1. JAVA计算平方,幂运算,三角函数等

    JAVA中要想计算一个数值的平方根, 可以使用 sqrt 方法: double x = 4; double y = Math.sqrt(x); System.out.println(y); 在 Jav ...

  2. java查找链表中间元素_如何通过Java单次查找链表的中间元素

    java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...

  3. java获取字典所有的key_JAVA脱水学习-java集合介绍,常用集合类

    在处理数据的过程中经常会需要一个容器来存储某一类型的数据,Java 中的数组就是这样一种容器.但 Java 中的数组有其局限性,定义后的数组长度不可变,超出数组长度后就不能再存放数据了.而很多时候我们 ...

  4. 【Java基础系列教程】第三章 Java变量与运算符

    一.Java程序基本结构 1.1 基本结构 Java程序基本结构示例代码: /** * 这里是文档注释 * 这是一个HelloWorld程序 */ public class HelloWorld {p ...

  5. 【Java书笔记】:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2部分-自动内存管理,第3部分-虚拟机执行子系统,第5部分-高效并发

    作者:周志明 整理者GitHub:https://github.com/starjuly/UnderstandingTheJVM 第2部分-自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 ...

  6. Java基础知识(重点)总结(Java学习方法、系统学习路线)

    参考:https://www.cnblogs.com/schiller-hu/p/10662429.html Java自学网:https://www.51zxw.net/list.aspx?cid=3 ...

  7. Java 并发编程解析 , 如何正确理解Java领域中的内存模型

    这些年,随着CPU.内存.I/O 设备都在不断迭代,不断朝着更快的方向努力.在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异.CPU 和内存的速度差异可以形象地描述为:CPU 是天 ...

  8. 1269道Java技术答疑,阿里技术专家帮你Java技术进阶

    云栖社区邀请到6位Java技术专家帮开发者答疑解惑,其中精华的1269道问答已经整理出来,供大家学习! 如有Java相关问题,请向专家提问https://yq.aliyun.com/promotion ...

  9. java 复杂网络分析_基于复杂网络的Java程序分析工具设计与实现思路浅谈

    基于复杂网络的Java程序分析工具设计与 实现思路浅谈 摘要:近年来,随着科学技术的进步,计算机技术发展速度的加快,使得软件价值也逐步提高,不管是软件系统的应用领域,还是其规模均获得了相应的扩大,且软 ...

  10. 再也不担心问到Java集合了,一文讲透Java中的数据结构

    Java数据结构实现详解 摘要 1 集合框架 1.1 顶层接口Iterable 1.2 Collection接口 2 List 2.1 List接口 2.2 List实现ArrayList 2.2.1 ...

最新文章

  1. Android SpannableString 给TextView 设置颜色,删除线等
  2. 计算机技能需求新排名:Python 仅排第 3,第 1 你可能猜不到哦
  3. Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
  4. Pidgin下使用Gtalk问题
  5. Application provided invalid, non monotonically increasing dts to muxer in stream 0: -92233720368547
  6. SparkR:数据科学家的新利器
  7. 【Python】函数的可变可选参数传递及返回值
  8. 【Linux】一步一步学Linux——lnstat命令(189)
  9. SAP Spartacus User form通过label标签的实现原理
  10. 循环服务器,并发服务器模型以及I/O多路转接模型
  11. 教授因被指控“奴役”博士生遭学校解雇,反手将学校告上法庭并获赔偿...
  12. DAY06-Python入门学习-元组、字典、集合类型
  13. LeetCode 117. 填充每个节点的下一个右侧节点指针 II
  14. atitit 高扩展性解决方案 功能扩展法 v2 t66.docx atitit 高扩展性解决方案.docx 1. 功能扩展 vs 性能扩展 2 1.1.       人无远虑,必有近忧。
  15. mysql varbinary blob_从数据库中读取SQL Varbinary Blob
  16. day09、1 - 简单渗透测试流程
  17. CCF_Java_201909-3_字符画
  18. JSP入门之表格以及常用表单元素(总结自身编程经验以及多本教科书)
  19. Usb ssh 管理android,Android USB VID PID 及 ADB
  20. 入侵检测系统的原理与应用

热门文章

  1. 主流webservice框架整理
  2. 如何通过python获取股票数据接口l2?
  3. 2023最新Web前端面试题精选大全及答案(一)
  4. Github开源项目详解--Mall(一)
  5. chrome 浏览器 console 加入 jquery 测试调试 一介布衣
  6. echarts的圆饼图自定义颜色
  7. 识骨寻踪第十二季/全集Bones迅雷下载
  8. 计算机一级b分数,2011年3月26日全国计算机一级B考试的分数分布new
  9. 关于项目文档和wiki页面
  10. 记录洛谷冰雹猜想的实现过程