java两个很大的数相加_两个超大数的相加
两个超大数的相加,主要是判断进一的情况,另外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两个很大的数相加_两个超大数的相加相关推荐
- 电脑发出很大的嗡嗡声_跟踪嗡嗡声的十大方法
电脑发出很大的嗡嗡声 "Tracking consumer trends is one way to gain inspiration, helping you dream up profi ...
- 苹果手机其他占内存很大去哪删除_手机没内存,照片又不舍得删除?这里有6大方法能帮你解决!...
虽说目前市面上可供购买的智能手机之中,大部分的内存都很大,可是,这一点并不足以成功吸引到多数的手机用户去更换手机.一般而言,我们的手机只要它的外观保护得较好,内在性能也还算过得去的话,我们大都不会买新 ...
- 两线怎么接三线插座图_两根线怎么接三孔插座?两根线接三孔插座注意事项
在生活中有时候你也许会碰到两根线来接三孔插座的情况,这对于很多电力知识不足的人可能就会感到很困惑了,这有点不符合平常的接线习惯啊.就算两根线可以接 三孔插座的话,在接线时是不是有些事项需要注意呢?既然 ...
- 两车相撞的力怎么计算_两车相撞怎么算加速度
加速度(Acceleration)是速度变化量与发生这一变化所用时间的比值.是描述物体速度改变快慢的物理量,通常用a表示,单位是m/s^2(米每二次方秒).加速度是矢量,它的方向是物体速度变化量的方向 ...
- 利用计算机网线传东西,两个电脑用网线传东西_两台电脑用网线传文件
2017-01-05 17:49:27 是把USB口给禁用了右键计算机--管理性能--设备管理器--通用串行总线控制器 禁用或者卸载 但是具体哪个对应哪个接口需要自己尝试下.建议禁用,如果想用打开比较 ...
- 如果有两个很大的数加在一起
时间复杂度是o(n) 比如f(n)=f(n-1)+f(n-2) o(n)
- python两个集合相加_两个集合相加java
Python常见数据结构整理 Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) ...
- java manualbuffer_java从很大的buffer数组中每次读128字节 读到最后不足128字节的用0xff补齐 这个代码怎么写 ?没有思路哎...
展开全部 public static void main(String[] args) { Integer[] buffer = new Integer[] { 12, 36, 48, 56, 67, ...
- java 句柄数 设置_修改操作系统句柄数和用户进程数
对于一般的应用来说(像Apache.系统进程)1024完全足够使用.但是像squid.mysql.java等单进程处理大量请求的应用来说就有点捉襟见肘了.如果单个进程打开的文件句柄数量超过了系统定义的 ...
最新文章
- Interview:算法岗位面试—上海某公司算法岗位(偏图像算法,互联网科技行业)技术面试考点之区块链的TPS等问题
- BFS+状态压缩 hdu-1885-Key Task
- [BZOJ] 1620: [Usaco2008 Nov]Time Management 时间管理
- ImageView倒影效果
- 《正则表达式必知必会》读书笔记【语法整理】
- A星寻路算法(A* Search Algorithm)
- linux mysql外网连接不成功的可能原因
- RHEL脚本更换YUM源(sohu)
- 云服务器ubuntu18安装界面,鲲鹏云服务器 ubuntu18 桌面安装
- python中render是什么意思_Django中render_to_response和render的区别(转载)
- 【Linux】常见错误 “cp: omitting directory”解决办法
- javascript案例26——求100以内所有7倍数之和
- SEM竞价推广关键词托词方法与词性划分
- Spring:applicationContext.xml的头文件信息
- 第六十八章 Caché 函数大全 $WASCII 函数
- 官宣!Apache Doris 从 Apache 孵化器毕业,正式成为 Apache 顶级项目!
- iOS逆向重签名(三):微信重签名
- [附源码]java毕业设计海雨市高校实验设备报修系统
- 有没有这样的后浪,月薪3000
- 定时关机命令——shutdown