当前位置: 首页 > news >正文

面试热题(字符串相加)

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。

你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。

输入:num1 = "11", num2 = "123"
输出:"134"

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

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

 这种方式的对齐方式运算肯定是错误的,所以我们不能从索引为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();
}

http://www.lryc.cn/news/113574.html

相关文章:

  • 我的创作纪念日【第一个2048day】
  • 内网穿透-————SSH远程连接树莓派
  • 一键开启ChatGPT“危险发言”
  • RISC-V基础之函数调用(一)简单的函数调用(包含实例)
  • apt、aptitude、apt-get/apt-cache语法的区别
  • 华为认证 | HCIA和HCIP有啥区别?
  • JavaScript基础知识
  • vue2 todoapp案例(静态)
  • qt5.14 和 qt5.15的区别
  • 如何使用自己域名进行远程访问内网群晖NAS 6.X
  • PHP判处重复延长队列执行时间
  • flask中的应用上下文
  • cocos creator 的input.on 不生效
  • WFPlayer
  • Netty面试题
  • 基于Home Assistant远程开门
  • Docker相关的参数配置
  • 【CSS3】CSS3 2D 转换 - scale 缩放 ③ ( 使用 scale 设置制作可缩放的按钮案例 )
  • Stable Diffusion教程(6) - 图片高清放大
  • freeswitch 1.10.10-dev录音早期媒体卡通道的bug分析
  • Zebec Protocol ,不止于 Web3 世界的 “Paypal”
  • Gcd 2023牛客暑期多校训练营6 G
  • 常用C++编译器推荐
  • C++QT教程1——QT概述(下载与安装)
  • 在oracle SQL中创建返回表的函数
  • Kubernetes API Aggregation API聚合
  • 【雕爷学编程】Arduino动手做(184)---快餐盒盖,极低成本搭建机器人实验平台
  • 重生学c++系列第三课类和对象(上)
  • 驱动开发-按键中断
  • 数据结构 | 二叉树的应用