>  기사  >  백엔드 개발  >  덧셈, 뺄셈, 곱셈, 나눗셈 기호를 사용하지 않고 PHP에서 덧셈을 구현하는 방법

덧셈, 뺄셈, 곱셈, 나눗셈 기호를 사용하지 않고 PHP에서 덧셈을 구현하는 방법

醉折花枝作酒筹
醉折花枝作酒筹앞으로
2021-07-09 15:05:371959검색

덧셈을 구현하려면 산술 기호를 사용해야 한다는 것을 알고 있는데, 산술 기호를 사용하지 않고 덧셈을 구현하는 방법은 무엇일까요? 오늘은 편집자가 덧셈, 뺄셈, 곱셈, 나눗셈 연산자를 사용하지 않고 덧셈을 구현하는 방법을 소개하겠습니다. 필요하시면 참고하시면 됩니다.

덧셈, 뺄셈, 곱셈, 나눗셈 기호를 사용하지 않고 PHP에서 덧셈을 구현하는 방법

두 정수의 합을 구하는 함수를 작성하세요. 함수 본문에는 4개의 산술 기호 "+", "-", "*" 및 "/"가 허용되지 않습니다.

예:

输入: a = 1, b = 1
输出: 2

팁:

a, b는 음수 또는 0일 수 있으며 결과는 32비트 정수를 오버플로하지 않습니다.

솔루션 아이디어 1

array_sum 함수

Code

class Solution {
    /** 
    * 递归法 
    * @param Integer $a 
    * @param Integer $b 
    * @return Integer 
    */
    function add($a, $b) {
        // return bcadd($a, $b); // bc 系列函数
        return array_sum([$a, $b]);
    }}

솔루션 아이디어 2 - 비트 연산의 도움으로

, 비트 연산에 대한 질문을 외우는 것이 더 좋습니다. 결국, 비트 연산과 같은 시뮬레이션 덧셈의 사용법은 기본적으로 바로 이 질문이므로 잊어버리기 쉽습니다. . . . .

^ 또는 - 캐리 없는 합산과 동일하며 기본 10의 시뮬레이션 상황을 상상해 보세요. (예: 19 + 1 = 20; 캐리 없는 합은 20이 아니라 10입니다. 캐리 상황은 고려하지 않기 때문입니다.)

& 및 ——는 각 비트의 캐리 수를 찾는 것과 동일합니다. 먼저 정의를 살펴보겠습니다. 1 & 1 = 1; 0 & 0 = 0; 1, 시뮬레이션할 수 있는 캐리 수에 대해 십진법의 시뮬레이션 상황을 상상해 보십시오. (9 + 1 = 10. & 아이디어를 사용하여 이를 처리하면 9 + 1로 얻은 캐리 수는 10이 아니라 1입니다. < <1을 사용하여 왼쪽으로 한 칸 더 이동하면 10이 됩니다.

공식은 다음과 같습니다. (a^b) ^ ((a&b)<<1) carry 획득한 캐리 수 - 캐리 수가 0이 될 때까지 이 과정을 반복해야 합니다.

Code

class Solution {
    /** 
    * 递归法 
    * @param Integer $a 
    * @param Integer $b 
    * @return Integer 
    */
    function add($a, $b) {
        if ($b == 0) {
            return $a;
        }
        return $this->add($a ^ $b, ($a & $b) << 1);
    }
    // 迭代法
    // function add($a, $b) {
    // while ($b != 0) {
    // $temp = $a ^ $b;
    // $b = ($a & $b) << 1;
    // $a = $temp;
    // }
    // return $a;
    // }}

문제 해결 아이디어 3 - 비트별 계산

원리는 비트 연산과 동일하며 수동 비트입니다. 작업 구현

code

class Solution {
    /** 
    * 此方法暂时只支持两个正数相加 
    * @param Integer $a 
    * @param Integer $b 
    * @return Integer 
    */
    function add($a, $b) {
        $a = "$a";
        $b = "$b";
        $lenA = strlen($a);
        $lenB = strlen($b);
        $res = &#39;&#39;;
        $flag = 0;   // 进位标志
        for ($i = $lenA - 1, $j = $lenB - 1; $i >= 0 || $j >= 0; $i--, $j--) {
            // 超出的位数用 0 表示
            $itemA = ($i >= 0) ? $a[$i] : 0;
            $itemB = ($j >= 0) ? $b[$j] : 0;
            // 求位数和
            $sum = (int)$itemA + (int)$itemB + $flag;
            // 是否进位
            if ($sum >= 10) {
                $flag = 1;  // 只可能为1
                $sum = $sum - 10;
            } else {
                $flag = 0;
            }
            
            $res = $sum . $res;
        }
        // 处理最高位进位
        return $flag > 0 ? $flag . $res : $res;
    }}

추천 학습:php 비디오 튜토리얼

위 내용은 덧셈, 뺄셈, 곱셈, 나눗셈 기호를 사용하지 않고 PHP에서 덧셈을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 hxd.life에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제