java - 将二进制数乘以二
问题描述
我正在尝试将二进制数乘以 2,而不是贪图其他计数系统。
我的算法是:
- 例如,如果前导数字为 1,则设为 0 并将 1 附加到前导 ('1'00 -> 1'0'00) 数字中
- 从数组的后面,如果(第i个元素为1,使其变为0),则
- 寻找下一个 0
- 把 0 变成 1
- 使肯定为1的元素之间全部变为0
终止点很可能是错误的,我可以通过标志(在第 1 步)和 if 语句轻松修复,以确定循环结束(第 2 步)变量
String ori = "10001"; char[] arry = ori.toCharArray(); System.out.println("start: " + new String(arry)); if (arry[0] == '1') { arry = ("1" + ori).toCharArray(); arry[1] = '0'; } System.out.println("start: " + new String(arry)); for (int i = arry.length - 1; i > 0; i--) { // not the lend digi if (isOneThenChange(arry, i)) { // hunt down next 0 int index = hunt(arry, i); if (index == -1) { for (int ii = 0; ii < arry.length; ii++) { System.out.print(arry[ii]); } System.exit(0); } System.out.println("index is: " + index); System.out.println("01234564"); System.out.println(arry); // make it into 1 arry[index] = '1'; // make the 1s in between 0s.. //// safe assumption index.. i and all 1s for (int k = index - 1; k < i; k++) { arry[k] = '1'; } } // Continue the loop and look for the next one } System.out.println("end: " + new String(arry));
追捕0的方法:
private static int hunt(char[] arry, int i) {
for (int j = i; j > 0; j--) {
if (arry[j] == '0')
return j;
}
return -1;
}
将位从 1 翻转为 0 的方法:
private static boolean isOneThenChange(char[] a, int i) {
if (a[i] == '1') {
a[i] = '0';
return true;
}
return false;
}
}
我的代码调试失败,我怀疑它在第 3、4、5 步
如何调试我的算法,并使其按预期运行?
解决方案
在二进制中,如果左移,则乘以 2。因此,就字符串而言,如果附加 a 0
,则实际上乘以 2。
x = 1110 // 14 in decimal
x << 1 // 28 in decimal
但是,由于您使用的是字符串:
String x = "1110"; // 14 in decimal
// As long as x != 0, append "0"
if (!x.equals("0")) {
x = x + "0"; // 11100 = 28
}
这与将基数为 10 的数字左移乘以 10 相同:
12
120
1,200
对于任何基数(基数),向左移动将您的数字乘以基数。(在这种情况下,基数为 2)。向右移动有效地将数字除以数字的基数并向下舍入。
推荐阅读
- python - 如何使用颜色图加速 plt.scatter()?
- java - 在单个类中在 java 中创建自定义异常是不好的做法?
- python - python上的CSS选择器,试图选择一个自定义属性,但它没有从我的脚本中读取它?(硒)
- couchbase - 是否可以在 Couchbase 客户端 SDK 中获取每个文档的 NRU 值?
- node.js - 为什么 Feathers 客户端手表有时不起作用(websocket,总是 listStrategy)
- git - Git推送成功但文件没有改变,为什么?
- qt-linguist - 在 Qt linguist 中的每个上下文中粘贴重复项
- reactjs - Netlify 部署无法在“查询”类型上查询字段“allContentfulGallery”
- swift - Swift 如何处理自动更新订阅的接收和验证
- node.js - AngularJS,来自 Json 通过服务器的特殊字符