前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 PHP 大数相加求和

原 PHP 大数相加求和

作者头像
霡霂
发布2018-06-04 16:07:56
1.1K0
发布2018-06-04 16:07:56
举报
文章被收录于专栏:雨过天晴雨过天晴

今年3月份的面试颇受挫折,被多位面试官“蹂躏”。 其中有次,面试不太理想,面试官就给了最后一次机会是几道ACM算法竞赛的题,是大数相加,大数相减,大数相乘,大数相除;遗憾的是,最后仅勉强做出大数相乘。 今天又遇到类似的问题,所以就趁机先把大数相加的代码,写出来,回头补上其他几个运算。

大数求和

代码语言:javascript
复制
<?php

$str = '00000000123123123123342425345344353453459999999';
$str2 = '3242567999999999999999999999999999999990';

// 函数验证
var_dump(strAdd($str, $str2));
// 通过PHP内置bcadd验证结果
var_dump(bcadd($str,$str2));

function strAdd($str = '', $str2 = '')
{
	if (strlen($str) > strlen($str2)) {
		// 将较短的数组左侧添加0, 将两个数组长度相同
		$str2 = str_pad($str2, strlen($str), '0', STR_PAD_LEFT);
		$count = strlen($str);
	} else {
		$str = str_pad($str, strlen($str2), '0', STR_PAD_LEFT);
		$count = strlen($str2);
	}

	// 初始化一个比最长数组长度多1位的一个数组,存放计算结果
	// 从开头填充0
	$sum = array_fill(0, $count, 0);

	// 根据计算习惯,从数组的最后一位,即字符串的最左端开始计算
	for ($i = $count - 1; $i >= 0; $i--) {
		// 由于php里,字符串可以直接当做数组处理,所以不必再分割
		// 将两个数字的对应位相加,累加到对应结果位上(不用赋值是因为下面可能有进位)
		$sum[$i] += $str[$i] + $str2[$i];
		// 如果大于10需要进位
		if($sum[$i] >= 10) {
			$sum[$i] -= 10;
			$sum[$i - 1] += 1;
		}
	}
	// 去除前导0
	foreach ($sum as $key => $value) {
		if($value == 0) {
			unset($sum[$key]);
		} else {
			break;
		}
	}

	return implode('', $sum);
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大数求和
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档