指数操作的一些方法
package com.ijqg.util;
import java.util.ArrayList;
import java.util.List;
public class MathUtils {
public static void main(String[] ma) {
System.out.println(i2ListI(31));
System.out.println(i2ListI(15));
System.out.println(i2ListI(7));
System.out.println(i2ListI(2));
System.out.println(i2ListI(62));
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
i2ListI(i);
}
long end = System.currentTimeMillis();
System.out.println("运行时间1:" + (end - start));
start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
i2ListI2(i);
}
end = System.currentTimeMillis();
System.out.println("运行时间2:" + (end - start));
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
i2ListI2(i);
}
end = System.currentTimeMillis();
System.out.println("运行时间3:" + (end - start));
start = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
i2ListI(i);
}
end = System.currentTimeMillis();
System.out.println("运行时间4:" + (end - start));
}
/**
* 把整数转换为2的指数积值数组
*
* @param x
* @return
*/
public static List<Integer> i2ListI2(int x) {
List<Integer> b = new ArrayList<Integer>();
if (x == 1)
return b;
int num = 0x1;
b.add(1);
// 把32位中小于x的数字(2的指数积值数字)都放入列表
for (int i = 0; i < 32; i++) {
num = num << 1;
if (num > x) {
break;
}
b.add(num);
}
int y = 0;
List<Integer> bb = new ArrayList<Integer>();
// 从高位到低位取b中的值与暂存值相加
// 1.如果相加大于x的值则放弃
// 2.如果相加小于x的值则存入列表,同时与暂存值相加
for (int i = b.size() - 1; i >= 0; i--) {
int t = b.get(i) + y;
if (t > x) {
continue;
}
y = t;
bb.add(b.get(i));
}
return bb;
}
/**
* 把整数转换为2的指数积值数组
*
* @param x
* @return
*/
public static List<Integer> i2ListI(int x) {
List<Integer> b = new ArrayList<Integer>();
if (x == 1)
return b;
int num = 0x1;
// 如果1与x大于0表示1是在包括在x内的
if ((num & x) > 0) {
b.add(1);
}
for (int i = 0; i < 32; i++) {
//
num = num << 1;
if (num > x) {
break;
}
if ((num & x) > 0) {
b.add(num);
}
}
return b;
}
/**
* 把字符串数组转换为整型和(字符串必须是整数形式)
*
* @param arrayString
* @return
*/
public static int arrayString2I(String[] arrayString) {
if (arrayString == null)
return 0;
int i = 0;
for (String s : arrayString) {
if (!s.isEmpty()) {
i += Integer.parseInt(s);
}
}
return i;
}
/**
* 把字符串列表转换为整型(字符串必须是整数形式)
*
* @param arrayString
* @return
*/
public static int listString2I(List<String> arrayString) {
if (arrayString == null)
return 0;
int i = 0;
for (String s : arrayString) {
if (!s.isEmpty()) {
i += Integer.parseInt(s);
}
}
return i;
}
/**
* 把字符串列表转换为整型(字符串必须是整数形式)
*
* @param arrayString
* @return
*/
public static String listString2S(String[] arrayString) {
if (arrayString == null)
return null;
StringBuilder sb = new StringBuilder();
for (String s : arrayString) {
if (!s.isEmpty()) {
sb.append(s);
sb.append(",");
}
}
int lastIndex = sb.lastIndexOf(",");
if (lastIndex > 1) {
sb.substring(0, lastIndex - 1);
}
return sb.toString();
}
/**
* 把字符串列表转换为整型(字符串必须是整数形式)
*
* @param arrayString
* @return
*/
public static int listInteger2I(List<Integer> arrayString) {
if (arrayString == null)
return 0;
int i = 0;
for (Integer s : arrayString) {
if (s != null) {
i += s;
}
}
return i;
}
/**
* 把字符串数组转换为整型(字符串必须是整数形式)
*
* @param arrayString
* @return
*/
public static int arrayInteger2I(Integer[] arrayString) {
if (arrayString == null)
return 0;
int i = 0;
for (Integer s : arrayString) {
if (s != null) {
i += s;
}
}
return i;
}
}