我是靠谱客的博主 超级大碗,最近开发中收集的这篇文章主要介绍[力扣刷题]二进制加法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这题我没有做出来,我的原本方法是两个都转成十进制,然后相加然后再转换成二进制
这是我写的二进制转十进制

static int toto10(String a) {
int u;
double tena;
int outa = 0;
for (int i = 0; i < a.length(); i++) {
u = a.charAt(i) - '0';
tena = u * Math.pow(2, a.length() - 1 - i);
// u = (int) u;
outa = outa + (int) tena;
}
return outa;
}

这是我写的十进制转为二进制


static String tento2(int n) {
String str = "";
while (n != 0) {
str = n % 2 + str;
n = n / 2;
}
return str;
}

但是运行中间,就是有那种整数溢出的问题,目前还没有想到方法解决,看了一下标准答案之一。
标准答案
思路:
先创建字符串变量而不是标量,继而每次按位取字符串相加,是1的话就有进位;

class Solution {
public String addBinary(String a, String b) {
StringBuffer ans = new StringBuffer(); //创建字符串变量
int n = Math.max(a.length(), b.length()), carry = 0;
for (int i = 0; i < n; ++i) {
carry += i < a.length() ? (a.charAt(a.length() - 1 - i) - '0') : 0; //取a的一位数,这里是从低位到高位
carry += i < b.length() ? (b.charAt(b.length() - 1 - i) - '0') : 0;
ans.append((char) (carry % 2 + '0'));//这里是从高位开始填充的,这里的高低位指的是✖2的指数的大小高低
carry /= 2;
}
if (carry > 0) {
ans.append('1');
}
ans.reverse(); //需要反转,因为上面的字符串变量填充的方向和2进制的运算规则是反的
return ans.toString();
}
}

最后

以上就是超级大碗为你收集整理的[力扣刷题]二进制加法的全部内容,希望文章能够帮你解决[力扣刷题]二进制加法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部