奇偶位交换
来源:互联网 发布:mx anywhere2 软件 编辑:程序博客网 时间:2024/06/07 05:01
题目:请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
给定一个int x,请返回交换后的数int。
测试样例:
10
返回:5
解析:很多人用的奇数位左移一位+偶数位右移一位解法,挺简洁的。本文主要用的暴力法。首先将10进制转为2进制。例如利用java的Integer.toBinaryString(),5转为二进制位101,奇偶交换后得到10(1010),问题来了,101怎么变为1010?显然101的高位应该有个0,就变为0101,这样就合理了。然后再来个奇偶位变换华丽转身变为10了。那么是不是二进制都需要在高位加0?答案是否定的。请看10(二进制1010),奇偶交换为5(0101),显然10的二进制高位并不需要加0。
规律来了:当某个数转为二进制后,如果二进制的位数为偶数(如10的二进制1010),高位就不需要加0,假如为奇数位(如5的二进制101)就需要再高位补0。
import java.util.*;public class Exchange { public int exchangeOddEven(int x) { String s=Integer.toBinaryString(x);//10进制转为2进制 if(s.length()%2!=0){//二进制的位数为奇数时,需要在高位加0 s="0"+s; } char [] arr=s.toCharArray(); for(int i=0;i<arr.length-1;i++){//完成奇偶位置的元素的交换 if(i%2==0){ char temp =arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } } return Integer.parseInt(String.valueOf(arr),2);//把2进制转为10进制 }}
阅读全文
0 0
- 奇偶位交换
- 奇偶位交换
- 奇偶位交换
- 奇偶位交换
- 奇偶位交换
- 奇偶位交换
- 奇偶位交换
- 奇偶位交换
- 5.6-奇偶位互相交换
- 交换二进制奇偶位(算法)
- int数据的奇偶位交换
- 【C语言】用宏实现一个整形奇偶位交换
- HDOJ/HDU 2562 奇偶位互换(交换位置~)
- 【C语言】宏定义交换二进制数的奇偶位
- 程序员面试金典:奇偶位交换、判断直线相交
- 宏实现奇偶位的交换,两个数最大值
- 程序员面试金典——奇偶位交换__(位运算)
- 奇偶行交换
- Android 系统发送“系统当前时间”的广播
- Selenium Grid 的使用
- 小白笔记-----------------------Metasploit (from tools)整理
- 【bzoj3522】 [Poi2014]Hotel
- Netty echo server 简例
- 奇偶位交换
- Mr.Smile填坑记——debug、release包MD5签名的获取方式
- redis写入文件
- codeforces—— 489B —— BerSU Ball
- eslint 的三大通用规则
- android studio 将已有的项目 以module Library的 形式引入到 现在的项目中可能碰到的一些问题
- 写高质量OC代码52建议总结:47.熟悉系统架构
- Spring Boot RabbitMQ Exchange
- hdu 6033 Add More Zero(数的位数)