0
点赞
收藏
分享

微信扫一扫

RocketMQ第二课-核心编程模型以及生产环境最佳实践

mjjackey 2023-08-11 阅读 30

      字符串相加这道题其实对于很多人来说是有挑战性的,因为有进位,所以很多人对此就望而生畏,但是,今天,看完我这篇博客后,你会对你已经的恐惧的烟消云算,我今天准备采取较为简单的方法来解决这道题

       在数学中我们进场用这种进制的方式进行两数的加法运算,我们在字符串中的加法运算也可以运用这种方式去解决问题

 这种方式的对齐方式运算肯定是错误的,所以我们不能从索引为0开始

 所以我们应该从两个字符串的最后一个索引开始,这样才能确定最后结果的准确性

  int i=num1.length()-1;//字符串num1的最后一位的索引
  int j=num2.length()-1;//字符串的num2的最后一位的索引
  int carry=0;//进位数

 

 while(i>=0||j>=0){
         
    }

       对于字符串,两个字符串的长度有的时候是不一样的,所以我们肯定要对长度短的字符串进行操作,补位,但是直接操作字符串肯定会对算法的性能进行损耗,所以我们在处理的时候做一点小小的改变

 int a=i>=0?(num1.charAt(i--)-'0'):0;
 int b=j>=0?(num2.charAt(j--)-'0'):0;

        int num=a+b+carry;
        carry=num/10;
        int c=num%10;
        sb.append(c);

 所以我们最后将字符串反转就可以得到最后的结果

源码如下:

       public String addStrings(String num1, String num2) {
        StringBuilder sb=new StringBuilder();
        int i=num1.length()-1;
        int j=num2.length()-1;
        int carry=0;
        while(i>=0||j>=0){
        int a=i>=0?(num1.charAt(i--)-'0'):0;
        int b=j>=0?(num2.charAt(j--)-'0'):0;
        int num=a+b+carry;
        carry=num/10;
        int c=num%10;
        sb.append(c);
    }
      if(carry==1){
            sb.append(carry);
        }
        return sb.reverse().toString();
}
举报

相关推荐

0 条评论