您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
二进制求和
第十三双眼睛2023-11-25【数据结构与算法】人已围观
简介二进制求和
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
最简单的思路:将二进制数转换为十进制数,相加后,再将结果转换为二进制。不过太长的字符串不行。代码如下
第二种思路:先找出两个二进制串中比较长的,然后开始循环从低位开始,两个二进制串的对应位相加得到和,将和取余数得到结果位,将和取整,得到前一位的进位,前一位的两个二进制位相加时,加上刚才的进位 ,循环完毕以后,如果和不为0,则添加到结果位中,这个时候,每个结果位拼接起来的二进制串是反着的,是从地位到高位的,需要翻转一下,就是最终结果。代码如下:
public static String method1(String s1,String s2) { int sum = Integer.parseInt(s1, 2) + Integer.parseInt(s2, 2); return Integer.toBinaryString(sum); } |
第二种思路:先找出两个二进制串中比较长的,然后开始循环从低位开始,两个二进制串的对应位相加得到和,将和取余数得到结果位,将和取整,得到前一位的进位,前一位的两个二进制位相加时,加上刚才的进位 ,循环完毕以后,如果和不为0,则添加到结果位中,这个时候,每个结果位拼接起来的二进制串是反着的,是从地位到高位的,需要翻转一下,就是最终结果。代码如下:
public static String method2(String a,String b) { int carry = 0; StringBuilder builder = new StringBuilder(); int length = Math.max(a.length(), b.length()); for (int i = 0; i<length; i ++) { if (i < a.length()) { carry = carry + (a.charAt(a.length() - 1 - i) - '0'); } if (i < b.length()) { carry = carry + (b.charAt(b.length() - 1 - i) - '0'); } builder.append((char) (carry % 2 + '0')); carry = carry / 2; } if (carry > 0) { builder.append(1); } builder.reverse(); return builder.toString(); } |
Tags:
很赞哦! ()
上一篇:合并两个有序数组(图文)
下一篇:x的平方根(图文)