该题 为Java语言程序设计与数据结构(进阶篇)原书第11版 P351 编程练习题30.10
public static void main(String[] args) {
String str = "10010";
int[] arr = stringToArr(str);
//调用方法逆序显示str
// arr:{0, 1, 0, 0, 1} 字符串的逆序
int dec = IntStream.of(arr).reduce(0, (e1, e2) ->{
/*if(e2 == 1)
e1 = (e1 + 1) * 2;
else
e1 = e1 * 2;
return e1;*/
return (e2 == 1) ? (e1 + 1) * 2 : e1 * 2;
});
System.out.println(dec);
}
/**
* 将指定二进制字符串转换为 逆序的数组
* @param str
* @return
*/
private static int[] stringToArr(String str) {
int[] arr = new int[str.length()];
int temp = 0;
for(int i = str.length() - 1; i >= 0; i--) {
arr[temp] = str.charAt(i) - '0';
temp++;
}
return arr;
}
如有问题欢迎评论区指正