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

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

醉折花枝作酒筹
풀어 주다: 2023-03-11 11:44:02
앞으로
2070명이 탐색했습니다.

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

덧셈, 뺄셈, 곱셈, 나눗셈 기호를 사용하지 않고 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:hxd.life
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿