无论你面试的是什么岗位,应该都或多或少看到过这个问题 - 两个长整数相加要怎么实现。如果a和b的位数不大,确实直接用类型转换就可以求出a+b了,但是万一a和b的位数都是几百位呢,早就溢出了,这时候要怎么计算呢?

这种情况下,有三种解决方法可供选择:

一、 用字符串来存储a和b的值;

二、 用数组来存储a和b的值;

三、 用链表来存储a和b的值。

这三种方法都有一个共同点,就是无论哪一种方法,都可以不用担心因为数字太大而造成数值溢出出错。而它们的解决思路也都大同小异,下面我们来分析解决思路。

做这种题的时候,我有一个惯性思维,就是用我们现实中的解题思路来教给计算机,让它也用这种方法来解决。回忆一下我们小学的时候,老师是不是教我们做加法的时候,要从最后一位开始加,遇到十的时候就要进行进位,直至两个数都加完。在编程中,我们也可以用这个思路来进行做题:

先找到a和b的最后一位,将这两个一位数相加并假设它存在tmp中,如果tmp大于9,那么就说明需要进位了,这时候加入一个标识表示是否需要进位,比如说我们拿addOne作为标识,那么这时候我们就需要将addOne置为1,然后tmp对10进行取模,就可以得到当前位置上的实际数值了,再对a和b的倒数第二位进行重复的操作...直至将a和b遍历完就结束。下面这段代码是用第二种方法来解决的,大家可以参考一下:

1 //方法二:将数字转化为数组再进行相加

2 functionadd(num1, num2){3 //将num1和num2转为数组,每格存储一位,比如num1 = “12345”,转成数组a之后就变成["1", "2", "3", "4", "5"]

4 let a = String.prototype.split.call(num1, "");5 let b = String.prototype.split.call(num2, "");6 //用来存储结果

7 let res =[];8 let addOne = 0; //用于判断是否需要金威

9 //当a和b其中一个不为空时,各取出最后一位数字并相加,如果其中一个先为空了,则将它置为0

10 while(a.length ||b.length){11 let item1 = parseInt(a.pop()) | 0;12 let item2 = parseInt(b.pop()) | 0;13 let tmp = item1 + item2 +addOne;14 if(tmp > 9){15 addOne = 1;16 tmp %= 10;17 }else{18 addOne = 0;19 }20 //unshift是js中的一个操作方法,array.unshift(item)表示在数组array的最前面插入item

21 res.unshift(tmp)22 }23 //当a和b都全部加完了之后,再最后一次判断是否需要进位

24 if(addOne) res.unshift(1);25 //最后利用join把数组转成字符串并返回

26 return res.join('');27 }

其他两种方法做起来也都大同小异,思路是一样的,只不过是实际操作起来的方法会有所不同,大家可以自己探索一下。

linux编译两个整数相加,常考面试题之两个字符串相加(长整数相加)相关推荐

  1. 操作系统之常考面试题

    操作系统之常考面试题 目录: 操作系统概述 进程的描述与控制 存储器管理 处理调度与死锁 注:在牛客上复习java摘录的,便于自己复习. 地址连接:https://www.nowcoder.com/t ...

  2. ES6 知识点及常考面试题

    ES6 知识点及常考面试题 var.let 及 const 区别 涉及面试题:什么是提升?什么是暂时性死区?var.let 及 const 区别? 对于这个问题,我们应该先来了解提升(hoisting ...

  3. 由浅入深 65个JS常考面试题

    由浅入深逐个击破 JS常考面试题(上篇) 1. 介绍一下JS的基本数据类型,值是如何存储的? JavaScript一共有8种数据类型,其中有7种基本数据类型:Undefined.Null.Boolea ...

  4. JS 异步编程及常考面试题

    JS 异步编程及常考面试题 并发(concurrency)和并行(parallelism)区别 涉及面试题:并发与并行的区别? 异步和这小节的知识点其实并不是一个概念,但是这两个名词确实是很多人都常会 ...

  5. JS 进阶知识点及常考面试题

    JS 进阶知识点及常考面试题 手写 call.apply 及 bind 函数 涉及面试题:call.apply 及 bind 函数内部实现是怎么样的? 首先从以下几点来考虑如何实现这几个函数 不传入第 ...

  6. 30道计网常考面试题含答案总结!血赚!

    往期热门文章: 1.Spring官方为什么建议构造器注入?2.还在用 Random生成随机数?试试 ThreadLocalRandom,超好用!3.这些年 Java8 的 Optional 你用对了吗 ...

  7. 爆肝总结30道计网常考面试题

    前面已经写过两篇计算机网络文章,涉及内容较多较杂,因此总结了30道面试题进行针对性复习,帮助大家更好的理解相关知识. 1.为什么TCP连接的时候是3次?2次不可以吗? 考虑丢包问题 因为需要考虑连接时 ...

  8. 计算机网络基础常考面试题总结

    计算机网络基础常考面试题总结 1.OSI,TCP/IP,五层协议的体系结构,以及各层协议 答:OSI分层 (7层):物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. TCP/IP分层(4层 ...

  9. JS 基础知识点及常考面试题(一)

    JS 基础知识点及常考面试题(一) 原始(Primitive)类型 涉及面试题:原始类型有哪几种?null 是对象嘛? 在 JS 中,存在着 6 种原始值,分别是: boolean null unde ...

最新文章

  1. GPS定位精度单位CEP、RMS、2DRMS
  2. 5个常见的SD-WAN挑战以及如何应对-Vecloud
  3. Nutch使用方法简介
  4. 材料成型计算机模拟第三版,材料成型计算机模拟实验报告模板学习.doc
  5. 神经网络之文本情感分析(三)
  6. 第一单元总结(汇编初探)
  7. Android ActionBar的Overlay模式如何不遮盖顶部内容的问题
  8. C++泛型编程——迭代器
  9. vs2008 html5 的安装,vs2008安装教程,详细教您vs2008安装教程
  10. 怎么把链接生成二维码?怎样制作一个链接二维码?
  11. 二维码第三方支付介绍
  12. MyBatis 常见面试题有哪些?
  13. Datatable 列名
  14. Uos统信系统 本地APT源配置
  15. svn冲突问题详解 SVN版本冲突解决详解
  16. css级联样式表_CSS –级联样式表| 第三部分
  17. 易观 OLAP 大赛揭晓 PingCAP 斩获商业组桂冠
  18. 【荐读】职场生存法则和智慧
  19. 密码学 加密文件系统
  20. mac下配置VSCode的C语言开发环境

热门文章

  1. 解决ubuntu修改密码 Module is unknow报错
  2. Docker Day 4 Docker基础之Dockerfile语法
  3. Spark2.2.0 分布式离线搭建
  4. 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
  5. 解决mysqlAccess denied for user'root'@'IP地址'问题
  6. RocketMQ学习(一):简介和QuickStart
  7. 05-01-部署 WSUS on Windows 2019 Core
  8. BGP MPLS中MCE技术介绍
  9. 树莓派(Raspberry Pi 3) - 系统烧录及系统使用
  10. Windows server 2008 R2远程桌面3389端口号修改