做网站的公司在哪,部署自己做的网站吗,来年做那个网站能致富,做算命网站赚钱吗#x1f389;欢迎大家收看#xff0c;请多多支持#x1f339;
#x1f970;关注小哇#xff0c;和我一起成长#x1f680;个人主页#x1f680; #x1f451;目录
分析#xff1a;#x1f680;
数字层面分析⭐
字符串层面分析⭐
代码及运行结果分析:#x1f6… 欢迎大家收看请多多支持
关注小哇和我一起成长个人主页 目录
分析
数字层面分析⭐
字符串层面分析⭐
代码及运行结果分析:
代码⭐
运行结果编辑⭐
具体分析⭐ 题目 分析
数字层面分析
先来看在二进制中 101000110
如果两个多位的二进制数相加就还要考虑是否向前一位进1的问题显然上面的三个式子中只有 110是需要向前进一位的。
考虑了向前进位的问题还要考虑当前位的数字相加是否要多加一个来自上一位进的1即当前位的上一位如果进1了的话那么当前位相加是需要加上这个进的 1
前一位没有进 1前一位进 11和0相加10 1不向前一位进1101 0向前进11和1相加11 0向前进1111 1向前进10和0相加00 0不向前进1001 1不向前进1
因此我们可以知道10、00、11这三种情况的结果都有两种情况
并且当 11 相加的时候一定会向前进一位
00 相加的时候一定不会进一位
而 01 时就会有进一位和不进一位两种情况即它的上一位的两个数相加进了一位那么01才会向前进一位它的上一位两个数没有向前进位那么01就不会进位
字符串层面分析
计算数字时我们都会右对齐来计算但是在代码中我们习惯从左到右来分析解决问题因此我们可以将字符串反转计算完后在反转回来就能够得到原来的字符串相加的结果 这里需要用到StringBuilder类和StringBuffer类的reverse()方法来反转字符串它会修改调用的对象而不是新建一个对象 str.reverse();//将字符串str反转 两个字符串的长度如果不相同我们可以给较短的字符串反转之后再末尾添加上0来计算并且不会影响结果。 str.append(hello);//给字符串str尾部追加一个hello 代码及运行结果分析:
代码
import java.util.Scanner;
public class Test {public static void main(String[] args) {//输入两个字符串a和b字符串内容为二进制数字求两个字符串相加的结果// 加法计算方法以二进制方式计算并返回对应的字符串结果。要求程序尽可能的高效。//字符串长度不超过100Scanner in new Scanner(System.in);while(in.hasNextLine()){String str1 in.nextLine();String str2 in.nextLine();Solution solution new Solution();String ret solution.solve(str1,str2);System.out.println(ret);}}static class Solution {public String solve(String str1, String str2) {int len1 str1.length();int len2 str2.length();int maxLen Math.max(len1,len2);StringBuilder strB1 new StringBuilder(str1).reverse();StringBuilder strB2 new StringBuilder(str2).reverse();StringBuilder str new StringBuilder();Boolean flag false;//代表不进位for(int i 0;i maxLen;i){char ch1 i len1?strB1.charAt(i):0;char ch2 i len2?strB2.charAt(i):0;if(ch10ch20){str.append(flag?1:0);flag false;//相加为0,不用进一}else if(ch1 1 ch2 1){str.append(flag?1:0);flag true; //相加要进1}else{str.append(flag?0:1);//注意}}if(flag true){str.append(1);}return str.reverse().toString();}}
}
运行结果
可以看到我们成功解决了这个题目
具体分析 StringBuilder strB1 new StringBuilder(str1).reverse();StringBuilder strB2 new StringBuilder(str2).reverse();
这两行代码就第一行来说
new StringBuilder(str1)创建了一个StringBuilder类的对象并将对象的内容初始化为字符串str1的内容然后再.reverse()将内容反转。strB1变量引用了这个对象。
char ch1 i len1?strB1.charAt(i):0;
char ch2 i len2?strB2.charAt(i):0;
这两行代码是来判定是否需要给当前为添加一个0 注意相加过程的0和1相加的代码由前面的数字层面分析我们知道0和1相加是否需要进1取决于它的上一位相加是否进1所以我们不需要在这里写flag true或者false写了就会错
if(ch10ch20){str.append(flag?1:0);flag false;//相加为0,不用进一
}else if(ch1 1 ch2 1){str.append(flag?1:0);flag true; //相加要进1
}else{str.append(flag?0:1);//注意
}
代码的后面写这个是因为当字符串最后两个0或1相加完后如果是两个1相加就还要再进1 if(flag true){str.append(1);} 本次题目分析结束啦感谢支持
如有高见来评论区发言吧~
喜欢请三连哦❤️再次感谢