大きな数の加算と減算

<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
function solve( $s ,  $t )
{
    //先判断哪个字符串长度较小
    if (strlen($s) < strlen($t)) {
        $smallStr = $s;
        $bigStr = $t;
    }else {
        $smallStr = $t;
        $bigStr = $s;
    }
    //长度小的字符串补齐
    $diffLen = strlen($bigStr) - strlen($smallStr);
    for ($i = 0; $i < ($diffLen); $i++) {
        $smallStr = "0".$smallStr;
    }
    
    $len = strlen($bigStr);
    $jin = 0;
    for ($pos = $len -1 ; $pos >= 0; $pos--) {
        $sum = intval($bigStr{$pos}) + intval($smallStr{$pos}) + $jin;
        if ($sum >= 10) {
            $res = $sum % 10;
            $jin = 1;
            $bigStr = substr_replace($bigStr, $sum % 10, $pos, 1);
        }else {
            $jin = 0;
            $bigStr = substr_replace($bigStr, $sum, $pos, 1);
        }
    }
    //如果最后一位还要进位,则增加
    if ($jin == 1) {
        $bigStr = "1".$bigStr;
    }
    
    return $bigStr;
}
//大数相减
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;
}

おすすめ

転載: blog.csdn.net/qq_40192867/article/details/123201897