ホームページ > バックエンド開発 > PHPの問題 > 加算、減算、乗算、除算の記号を使用せずに PHP で加算を実装する方法

加算、減算、乗算、除算の記号を使用せずに PHP で加算を実装する方法

醉折花枝作酒筹
リリース: 2023-03-11 11:44:02
転載
2069 人が閲覧しました

加算を実装するには算術記号を使用する必要があることはわかっていますが、算術記号を使用せずに加算を実装するにはどうすればよいでしょうか?今回は、加減乗除演算子を使わずに足し算を実装する方法をエディターが紹介しますので、必要な方は参考にしてください。

加算、減算、乗算、除算の記号を使用せずに PHP で加算を実装する方法

2 つの整数の合計を求める関数を作成してください。4 つの算術記号 " "、"-"、"*"、および "/" は使用できません。関数本体で使用できます。

例:

输入: a = 1, b = 1
输出: 2
ログイン後にコピー

ヒント:

a、b は負または 0 であっても、結果は 32 ビット整数をオーバーフローしません

# #問題を解決する アイデア 1

array_sum 関数

コード

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; 1 & 0 = 0; 0 & 0 = 0; つまり、両方が1 は 1 だけで、キャリー数の状況をシミュレートすることも、10 進数でシミュレーション状況を想像することもできます: (9 1 = 10、& の考えで処理すると、キャリー数が得られます) by 9 1 は 1 であり、10 ではありません。したがって、<<1 を使用して 1 位置左に移動すると、10 になります);

式は次のとおりです: (a^b) ^ ((a&b) <<1) つまり: キャリーなしで毎回キャリーの数を見つけます - キャリーの数が 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 - ビット単位の計算

原理はビット演算と同等ですが、手動ビット演算の実装

コード

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:hxd.life
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート