当前位置:编程学习 > JAVA >>

字符串组合与分解

基础数据存储是如以下的值,就是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;
}
}
--------------------编程问答-------------------- 帮顶 --------------------编程问答--------------------
引用 1 楼 nmyangym 的回复:
参考一下:
Java code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546import java.util.*;public class FormOfPowOf2{    public static void main(String[] rags)……


看懂了 --------------------编程问答-------------------- 一楼想法不错,效率很高,我还没想到直接用二进制数来做 --------------------编程问答--------------------
引用 楼主 zyl2001 的回复:
基础数据存储是如以下的值,就是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,想……

这个一个看就是个二进制取&的问题吧
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,