php大整数相加、减

原理是把数字拆除单个字符,从个位开始相加减。
大整数相加

function plus($a, $b) {
	if (!is_string($a) || !is_string($b)) {
		echo '参数必须是字符串类型';
		return;
	}
	$len = strlen($a) > strlen($b) ?  strlen($a) : strlen($b);

	/// 反转字符串
	$ar = strrev($a);
	$br = strrev($b);

	$result = '';
	for($i = 0 ;$i < $len; $i++) {
		//从个位开始加,缺的补0 
		$temp = (empty($ar[$i]) ? 0 : $ar[$i]) + (empty($br[$i]) ? 0 : $br[$i]);
		if (!empty($apendOne)) {
			//当后一位进1时加1
			$temp += 1;
		}
		
		$apendOne = false;
		if ($temp > 9) {
			/// 如果结果大于9 向前进1 减10 做标记
			$apendOne = true;
			$temp -= 10;
		}
		$result = $temp . $result;
	}
	
	return (string)$result;
}

echo plus("321312312312313123131231231232", "13") . '<br>';
echo 321312312312313123131231231232 +13;

结果:
321312312312313123131231231245
3.2131231231231E+29


大整数相减
function minus($a, $b) {
	if (!is_string($a) || !is_string($b)) {
		echo '参数必须是字符串类型';
		return;
	}
	$len = strlen($a) > strlen($b) ?  strlen($a) : strlen($b);
	
	/// 反转字符串
	$ar = strrev($a);
	$br = strrev($b);

	$result = '';
	for($i = 0 ;$i < $len; $i++) {
		//从个位开始减,缺的补0 
		$temp = (empty($ar[$i]) ? 0 : $ar[$i]) - (empty($br[$i]) ? 0 : $br[$i]);
		if (!empty($borrowOne)) {
			//当后一位借1时减1
			$temp -= 1;
		}
		
		$borrowOne = false;
		if ($temp < 0) {
			/// 如果结果是负数 向前借1 加10 做标记
			$borrowOne = true;
			$temp += 10;
		}
		$result = $temp . $result;
	}
	
	return $result;
}

echo minus("321312312312313123131231231232", "13") . '<br>';
echo 321312312312313123131231231232 -13;

结果:
321312312312313123131231231219
3.2131231231231E+29
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值