递归实现数N的二进制表示
来源:互联网 发布:testflight软件下载 编辑:程序博客网 时间:2024/05/21 19:22
实现递归方法,使它返回数N的二进制表示中的1的个数。(如果N是奇数,那么N的二进制表示中的1的个数为N/2的二进制表示的1的个数加1)。实现见文章最后。
数据结构和算法(Java语言描述)的第一章课后题。
先简化思路,可以先用递归实现数N的二进制表示,先用字符串类型,再用String进行字符对比获取二进制表示中1的个数。
根据数N的获取二进制表示的算法(除2取余,并将余数倒序排列)实现二进制表示的代码。
递归实现二级制表示的方法:
// 将传入的十进制数转化为二进制数(二进制数实际上表示为字符串) public static String toBinary(int i) { // 如果输入是0 直接返回0 if (i == 0) { return "0"; } if (i == 1) { return "1"; } String a = ""; if (i % 2 == 1) { a = "1"; } if (i % 2 == 0) { a = "0"; } return toBinary(i / 2) + a; }
方法已经实现大于等于0的任意数的二进制表示,返回值类型为String,当然,可以使用Integer.parseInt的方法来转换成int类型。
main方法测试:
public static void main(String[] args) { System.out.println((toBinary(45))); }
输出结果为101101 ,是45的二进制表示。正确。
这里已经获得了数N的二进制表示 ,可以继续从二进制表示的String中获取指定字符1的个数。
从指定字符串获取指定字符个数的方法:
// 从二进制数据中获取指定0或1的个数 public static int getNumFromString(char a, String binary) { char[] charArray = binary.toCharArray(); int num = 0; for (int i = 0; i < charArray.length; i++) { if (a == charArray[i]) { num++; } } return num; }
main方法测试:
public static void main(String[] args) { System.out.println((toBinary(45))); System.out.println(getNumFromString('1', toBinary(45))); }
输出101101 4
45的二进制表示为101101,包含4个1。正确。
实现递归方法,使它返回数N的二进制表示中的1的个数
根据除2取余的思路,如果余数为1,则记录1的个数的变量加1,然后商数继续除2取余,直到商变成1。
递归实现代码:
static int index = 0; public static int toBinary(int i) { // 如果仅仅是0 直接返回0 if (i == 0) { return 0; } if (i == 1) { index++; } else { if (i % 2 == 1) { index++; } } toBinary(i / 2); return index; }
验证:binary(45)结果为4,binary(9)结果为2,binary(110)结果为5。(binary(110)二进制表示为1101110)
阅读全文
0 0
- 递归实现数N的二进制表示
- 编写一个递归方法,返回数N的二进制表示中1的个数
- 递归方法计算数N的二进制表示中1的个数
- 编写一个递归方法,它返回数N的二进制表示中1的个数
- 编写一个递归方法,返回数N的二进制表示中1的个数
- 二进制数的表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- 浮点数的二进制表示
- linux下定时执行php脚本
- java名词注释
- BZOJ 1833 数位DP 解题报告
- A
- MobLink网页跳转app指定界面技术简介之Universal Link
- 递归实现数N的二进制表示
- “师创杯”山东理工大学第九届ACM程序设计竞赛 正式赛 F.校赛~校赛~【思维+规律题】
- 关于mysql服务器3306端口不能远程连接的解决
- 利用SMTP发送验证验证
- 防止表单内回车自动提交
- Failed to load resource: net::ERR_CONNECTION_REFUSED
- 在主方法中创建String对象,将字符变量原来的长度与去掉前导和尾部空格后的长度输出
- 查软件著作权或公司相关信息
- Windows下bat脚本获取时间和Linux下shell命令获取时间