【Java】——2的次幂表示(C和Java实现)
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实现)相关推荐
- JAVA计算平方,幂运算,三角函数等
JAVA中要想计算一个数值的平方根, 可以使用 sqrt 方法: double x = 4; double y = Math.sqrt(x); System.out.println(y); 在 Jav ...
- java查找链表中间元素_如何通过Java单次查找链表的中间元素
java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...
- java获取字典所有的key_JAVA脱水学习-java集合介绍,常用集合类
在处理数据的过程中经常会需要一个容器来存储某一类型的数据,Java 中的数组就是这样一种容器.但 Java 中的数组有其局限性,定义后的数组长度不可变,超出数组长度后就不能再存放数据了.而很多时候我们 ...
- 【Java基础系列教程】第三章 Java变量与运算符
一.Java程序基本结构 1.1 基本结构 Java程序基本结构示例代码: /** * 这里是文档注释 * 这是一个HelloWorld程序 */ public class HelloWorld {p ...
- 【Java书笔记】:《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》第2部分-自动内存管理,第3部分-虚拟机执行子系统,第5部分-高效并发
作者:周志明 整理者GitHub:https://github.com/starjuly/UnderstandingTheJVM 第2部分-自动内存管理 第2章 Java内存区域与内存溢出异常 2.2 ...
- Java基础知识(重点)总结(Java学习方法、系统学习路线)
参考:https://www.cnblogs.com/schiller-hu/p/10662429.html Java自学网:https://www.51zxw.net/list.aspx?cid=3 ...
- Java 并发编程解析 , 如何正确理解Java领域中的内存模型
这些年,随着CPU.内存.I/O 设备都在不断迭代,不断朝着更快的方向努力.在这个快速发展的过程中,有一个核心矛盾一直存在,就是这三者的速度差异.CPU 和内存的速度差异可以形象地描述为:CPU 是天 ...
- 1269道Java技术答疑,阿里技术专家帮你Java技术进阶
云栖社区邀请到6位Java技术专家帮开发者答疑解惑,其中精华的1269道问答已经整理出来,供大家学习! 如有Java相关问题,请向专家提问https://yq.aliyun.com/promotion ...
- java 复杂网络分析_基于复杂网络的Java程序分析工具设计与实现思路浅谈
基于复杂网络的Java程序分析工具设计与 实现思路浅谈 摘要:近年来,随着科学技术的进步,计算机技术发展速度的加快,使得软件价值也逐步提高,不管是软件系统的应用领域,还是其规模均获得了相应的扩大,且软 ...
- 再也不担心问到Java集合了,一文讲透Java中的数据结构
Java数据结构实现详解 摘要 1 集合框架 1.1 顶层接口Iterable 1.2 Collection接口 2 List 2.1 List接口 2.2 List实现ArrayList 2.2.1 ...
最新文章
- Android SpannableString 给TextView 设置颜色,删除线等
- 计算机技能需求新排名:Python 仅排第 3,第 1 你可能猜不到哦
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
- Pidgin下使用Gtalk问题
- Application provided invalid, non monotonically increasing dts to muxer in stream 0: -92233720368547
- SparkR:数据科学家的新利器
- 【Python】函数的可变可选参数传递及返回值
- 【Linux】一步一步学Linux——lnstat命令(189)
- SAP Spartacus User form通过label标签的实现原理
- 循环服务器,并发服务器模型以及I/O多路转接模型
- 教授因被指控“奴役”博士生遭学校解雇,反手将学校告上法庭并获赔偿...
- DAY06-Python入门学习-元组、字典、集合类型
- LeetCode 117. 填充每个节点的下一个右侧节点指针 II
- atitit 高扩展性解决方案 功能扩展法 v2 t66.docx atitit 高扩展性解决方案.docx 1. 功能扩展 vs 性能扩展	2 1.1. 人无远虑,必有近忧。
- mysql varbinary blob_从数据库中读取SQL Varbinary Blob
- day09、1 - 简单渗透测试流程
- CCF_Java_201909-3_字符画
- JSP入门之表格以及常用表单元素(总结自身编程经验以及多本教科书)
- Usb ssh 管理android,Android USB VID PID 及 ADB
- 入侵检测系统的原理与应用