字符串组合与分解
基础数据存储是如以下的值,就是2的次幂1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072
业务操作是选择基础数据的组合值
比如
存入7,就是选择了1,2,4
存入了48,就是选择了16,32
。。。
现在想把存入的值分解成选择值
比如7,想分解成 1,2,4
48,分解成 16,32
。。。。
如何实现,有熟悉的朋友请帮忙。。。
--------------------编程问答-------------------- 参考一下:
--------------------编程问答-------------------- 帮顶 --------------------编程问答--------------------
import java.util.*;
public class FormOfPowOf2
{
public static void main(String[] rags)
{
Scanner scan=new Scanner(System.in);
System.out.println("请输入一个大于0小于2147483647的整数:");
int number=scan.nextInt();
int[] form2=cal(number);
System.out.println("整数 "+number+" 以由下列2的幂的数组成:");
for(int k=0;k<form2.length;k++)
{
System.out.print(form2[k]+"\t");
}
System.out.println();
}
//计算方法,要求x>=0,x<=2147483647。
public static int[] cal(int x)
{
int shift=1;
int[] temp=new int[32];
int count=0;
for(int i=0;i<temp.length;i++)
{
if(shift>x||shift<0) //shift这个数已经大于 x了,结束计算。
{
break;//no need.
}
int y=x & shift;
if(y>0)
{
temp[count++]=(int)Math.pow(2,i);
shift=shift<<1;
}
else
{
shift=shift<<1;
continue;
}
}
int[] result=Arrays.copyOf(temp,count); //紧缩
return result;
}
}
看懂了 --------------------编程问答-------------------- 一楼想法不错,效率很高,我还没想到直接用二进制数来做 --------------------编程问答--------------------
这个一个看就是个二进制取&的问题吧
补充:Java , Java SE