PHP-字符串相乘

字符串相乘

題意

給定兩個(gè)以字符串形式表示的非負(fù)整數(shù) num1 和 num2抑月,返回 num1 和 num2 的乘積停士,它們的乘積也表示為字符串形式

示例1:

輸入: num1 = "2", num2 = "3"
輸出: "6"

示例2:

輸入: num1 = "123", num2 = "456"
輸出: "56088"

示例3:

輸入: num1 = "999999999", num2 = "999999999"
輸出: "999999998000000001"

解題思路:

模擬乘法公式進(jìn)行計(jì)算

                 1     2     3
             *         2     2
        -------------------------
                 2     4     6
           2     4     6
        -------------------------
           2     7     0     6

代碼

class Solution
{
    /**
     * @param String $num1
     * @param String $num2
     * @return String
     */
    public function multiply($num1, $num2)
    {
        if ($num1 == '0' || $num2 == '0') {
            return '0';
        }

        $strNum1 = $num1;
        $strNum2 = $num2;

        if (strlen($num1) < strlen($num2)) {
            $strNum1 = $num2;
            $strNum2 = $num1;
        }

        $size1  = strlen($strNum1) - 1;
        $size2  = strlen($strNum2) - 1;
        $sumArr = [];
        $k      = 0;

        //乘法公式計(jì)算
        for ($i = $size2; $i >= 0; $i--) {
            $q   = 0;
            $sum = ($k++ > 0) ? array_pad([], $k - 1, 0) : [];
            for ($j = $size1; $j >= 0; $j--) {
                $num   = $strNum2{$i} * $strNum1{$j} +$q;
                $c     = $num % 10;
                $q     = ($c != $num) ? floor($num / 10) : 0;
                $sum[] = $c;
            }
            if ($q != 0) {
                $sum[] = $q;
            }
            $sumArr[] = $sum;
        }

        //加法公式計(jì)算
        $i   = 0;
        $q   = 0;
        $end = count($sum);
        $sum = [];
        while (1) {
            $num = 0;
            foreach ($sumArr as $item) {
                $num += $item[$i];
            }
            $num = (($q != 0) ? $num + $q : $num);
            if ($i >= $end) {
                ($q != 0) ? $sum[] = $q : null;
                break;
            }
            $c     = $num % 10;
            $q     = ($c != $num) ? floor($num / 10) : 0;
            $sum[] = $c;
            $i++;
        }
        return join(array_reverse($sum), '');
    }
}

測(cè)試

print_r((new Solution())->multiply('123', '22')); //輸出:2706
print_r((new Solution())->multiply('2', '3')); //輸出:6
print_r((new Solution())->multiply('123', '456')); //輸出:56088
print_r((new Solution())->multiply('999999999', '999999999')); //輸出:999999998000000001
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末衡便,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铭腕,更是在濱河造成了極大的恐慌蚊夫,老刑警劉巖诉字,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異这橙,居然都是意外死亡奏窑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門屈扎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來埃唯,“玉大人,你說我怎么就攤上這事鹰晨∧眩” “怎么了?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵模蜡,是天一觀的道長(zhǎng)漠趁。 經(jīng)常有香客問我,道長(zhǎng)忍疾,這世上最難降的妖魔是什么闯传? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮卤妒,結(jié)果婚禮上甥绿,老公的妹妹穿的比我還像新娘。我一直安慰自己则披,他們只是感情好共缕,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著士复,像睡著了一般图谷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上阱洪,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天便贵,我揣著相機(jī)與錄音,去河邊找鬼冗荸。 笑死承璃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的俏竞。 我是一名探鬼主播绸硕,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼魂毁!你這毒婦竟也來了玻佩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤席楚,失蹤者是張志新(化名)和其女友劉穎咬崔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烦秩,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垮斯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了只祠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兜蠕。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抛寝,靈堂內(nèi)的尸體忽然破棺而出熊杨,到底是詐尸還是另有隱情,我是刑警寧澤盗舰,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布晶府,位于F島的核電站,受9級(jí)特大地震影響钻趋,放射性物質(zhì)發(fā)生泄漏川陆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一蛮位、第九天 我趴在偏房一處隱蔽的房頂上張望较沪。 院中可真熱鬧,春花似錦土至、人聲如沸购对。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骡苞。三九已至,卻和暖如春楷扬,著一層夾襖步出監(jiān)牢的瞬間解幽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工烘苹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留躲株,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓镣衡,卻偏偏與公主長(zhǎng)得像霜定,于是被迫代替她去往敵國(guó)和親档悠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359