两个超大数的相加,主要是判断进一的情况,另外int型有边界限制,所以转换成字符串型进行处理。

/**

* @description 两个超大的数字相加

* @param $numA string 第一个大数

* @param $numB string 第二个大数

* @return string 两个大数之和

**/

function largeNumberAdding(string $numA, string $numB) {

//边界校验

if (empty($numA)) {

if (empty($numB)) {

return '0';

} else {

return $numB;

}

} else {

if (empty($numB)) {

return $numA;

}

}

$result = $tmpRes = $head = $tmpHead = '';

$lenA = strlen($numA);

$lenB = strlen($numB);

$revA = strrev($numA);

$revB = strrev($numB);

$common = min($lenA, $lenB);

//截取超出部分长度

$tmpHead = ($lenA > $lenB) ? substr($revA, $common) : substr($revB, $common);

//是否进一

$addOne = false;

//重叠部分处理

for ($i=0; $i

$tmp = (int)$revA[$i] + (int)$revB[$i];

$addOne && $tmp += 1;

$tmpRes .= (string)($tmp % 10);

$addOne = ($tmp >= 10) ? true : false;

}

//头部处理

if ($addOne) {

if ($tmpHead) {

$headlen = strlen($tmpHead);

for ($j=0; $j

$tmp = (int)$tmpHead[$j];

if ($addOne) {

$tmp += 1;

$tmpRes .= (string)($tmp % 10);

$addOne = ($tmp >= 10) ? true : false;

} else {

$tmpRes .= (string)$tmp;

}

}

}

//相同位数进一直接+1

$addOne && $tmpRes .= '1';

} else {

$tmpRes .= $tmpHead;

}

//将结果倒转

$result = strrev($tmpRes);

return $result;

}

$a = '988881111111110000000000000000000';

$b = '10002222222222';

$res = largeNumberAdding($a, $b);

var_dump($res);

输出结果:

string(33) "988881111111110000010002222222222"

时间复杂度: O(n)

思考:

1, 这里的超大数默认为正整数,没有支持负数或浮点数,需要优化;

java两个很大的数相加_两个超大数的相加相关推荐

  1. 电脑发出很大的嗡嗡声_跟踪嗡嗡声的十大方法

    电脑发出很大的嗡嗡声 "Tracking consumer trends is one way to gain inspiration, helping you dream up profi ...

  2. 苹果手机其他占内存很大去哪删除_手机没内存,照片又不舍得删除?这里有6大方法能帮你解决!...

    虽说目前市面上可供购买的智能手机之中,大部分的内存都很大,可是,这一点并不足以成功吸引到多数的手机用户去更换手机.一般而言,我们的手机只要它的外观保护得较好,内在性能也还算过得去的话,我们大都不会买新 ...

  3. 两线怎么接三线插座图_两根线怎么接三孔插座?两根线接三孔插座注意事项

    在生活中有时候你也许会碰到两根线来接三孔插座的情况,这对于很多电力知识不足的人可能就会感到很困惑了,这有点不符合平常的接线习惯啊.就算两根线可以接 三孔插座的话,在接线时是不是有些事项需要注意呢?既然 ...

  4. 两车相撞的力怎么计算_两车相撞怎么算加速度

    加速度(Acceleration)是速度变化量与发生这一变化所用时间的比值.是描述物体速度改变快慢的物理量,通常用a表示,单位是m/s^2(米每二次方秒).加速度是矢量,它的方向是物体速度变化量的方向 ...

  5. 利用计算机网线传东西,两个电脑用网线传东西_两台电脑用网线传文件

    2017-01-05 17:49:27 是把USB口给禁用了右键计算机--管理性能--设备管理器--通用串行总线控制器 禁用或者卸载 但是具体哪个对应哪个接口需要自己尝试下.建议禁用,如果想用打开比较 ...

  6. 如果有两个很大的数加在一起

    时间复杂度是o(n) 比如f(n)=f(n-1)+f(n-2) o(n)

  7. python两个集合相加_两个集合相加java

    Python常见数据结构整理 Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) ...

  8. java manualbuffer_java从很大的buffer数组中每次读128字节 读到最后不足128字节的用0xff补齐 这个代码怎么写 ?没有思路哎...

    展开全部 public static void main(String[] args) { Integer[] buffer = new Integer[] { 12, 36, 48, 56, 67, ...

  9. java 句柄数 设置_修改操作系统句柄数和用户进程数

    对于一般的应用来说(像Apache.系统进程)1024完全足够使用.但是像squid.mysql.java等单进程处理大量请求的应用来说就有点捉襟见肘了.如果单个进程打开的文件句柄数量超过了系统定义的 ...

最新文章

  1. Interview:算法岗位面试—上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区块链的TPS等问题
  2. BFS+状态压缩 hdu-1885-Key Task
  3. [BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理
  4. ImageView倒影效果
  5. 《正则表达式必知必会》读书笔记【语法整理】
  6. A星寻路算法(A* Search Algorithm)
  7. linux mysql外网连接不成功的可能原因
  8. RHEL脚本更换YUM源(sohu)
  9. 云服务器ubuntu18安装界面,鲲鹏云服务器 ubuntu18 桌面安装
  10. python中render是什么意思_Django中render_to_response和render的区别(转载)
  11. 【Linux】常见错误 “cp: omitting directory”解决办法
  12. javascript案例26——求100以内所有7倍数之和
  13. SEM竞价推广关键词托词方法与词性划分
  14. Spring:applicationContext.xml的头文件信息
  15. 第六十八章 Caché 函数大全 $WASCII 函数
  16. 官宣!Apache Doris 从 Apache 孵化器毕业,正式成为 Apache 顶级项目!
  17. iOS逆向重签名(三):微信重签名
  18. [附源码]java毕业设计海雨市高校实验设备报修系统
  19. 有没有这样的后浪,月薪3000
  20. 定时关机命令——shutdown

热门文章

  1. 用WebCollector爬取新浪微博数据
  2. Eclipse 引导阮卓项目 No projects are found to import解
  3. 修正wme输出的ASF流数据
  4. Kaggle狗的种类识别竞赛——基于Pytorch框架的迁移学习方法
  5. 真香!原来 CLI 开发可以这么简单
  6. Redis 命令--Redis有序集合(sorted set)
  7. gorm配置logger显示执行的sql
  8. redis sentinel哨兵配置及日志分析(grep -v)
  9. 使用docker-compose配置redis服务
  10. typora及vue主题安装