题目要求:将整数的奇偶位互换
方法一:
暴力法:1.输入一个十进制数2.将十进制数转化成二进制字符串3.将二进制字符串转成字符数组4.遍历字符数组,将相邻的前后两位进行交换
import java.util.*;
public class 整数的奇偶位互换 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int N=sc.nextInt();
String str =Integer.toString(N, 2);
System.out.println("原来的二进制数为"+str);
char []c =new char[str.length()];
c=str.toCharArray();
for(int i=0;i<str.length()-1;i++)
{
char term =c[i];
c[i]=c[i+1];
c[i+1]=term;
i++;
}
System.out.println("调换奇偶位置后的二进制位");
for(int i=0;i<str.length();i++)
{
System.out.print(c[i]);
}
}
}
最后输出的是奇偶位颠倒的字符串
方法二:
利用位运算的思维
代码:
import java.util.*;
public class 通过位运算进行奇偶数的交换 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int N=sc.nextInt();
System.out.println("二进制位"+Integer.toString(N, 2));
int ou =N&0xaaaaaaaa;
int ji =N&0x55555555;
System.out.println("交换奇偶位之后的数字为"+((ou>>1)^(ji<<1)));
}
}
题目:
给定一个介于0和1之间的实数,(如0.625),类型为double,打印它的二进制表示(0.101,因为小数点后的二进制分别表示0.5,0.25,0.125…)。
如果该数字无法精确地用32位以内的二进制表示,则打印“ERROR”
算法:乘二取余法
代码:
import java.util.*;
public class 十进制的浮点数转化成二进制 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
double N=sc.nextDouble();
StringBuilder str =new StringBuilder("0.");
while(N>0)
{
N=N*2;
if(N>=1)
{
N=N-1;
str.append('1');
}
else
{
str.append('0');
}
if(str.length()>34)
{
System.out.println("ERROR");
return;
}
}
System.out.println(str);
}
}
知识点:StringBuilder和append的使用,可以改变的字符串对象StringBuilder。可以利用append方法在原始字符串的基础上进行添加。
String 、StringBuffer、StringBuilder的总结