592。分?jǐn)?shù)加法和減法
難度:中等
主題:數(shù)學(xué)、字符串、模擬
給定一個表示分?jǐn)?shù)加減表達(dá)式的字符串表達(dá)式,以字符串格式返回計(jì)算結(jié)果。
最終結(jié)果應(yīng)該是一個不可約分?jǐn)?shù)。如果您的最終結(jié)果 是整數(shù),請將其更改為分母為 1 的分?jǐn)?shù)格式。所以在這種情況下,2應(yīng)該轉(zhuǎn)換為2/1。
示例1:
輸入:表達(dá)式 = “-1/2+1/2”
輸出:“0/1”
示例2:
輸入:表達(dá)式 = “-1/2+1/2+1/3”
輸出:“1/3”
示例3:
輸入:表達(dá)式 = “1/3-1/2”
輸出:“-1/6”
限制:
輸入字符串僅包含’0’到’9’、’/’、’+’和’-‘。輸出也是如此。
每個分?jǐn)?shù)(輸入和輸出)的格式為±分子/分母。如果第一個輸入分?jǐn)?shù)或輸出為正,則將省略 ‘+’。
輸入僅包含有效的不可約分?jǐn)?shù),其中每個分?jǐn)?shù)的分子和分母將始終在[1, 10]范圍內(nèi)。如果分母為 1,則意味著該分?jǐn)?shù)實(shí)際上是上面定義的分?jǐn)?shù)格式的整數(shù)。
給定分?jǐn)?shù)的數(shù)量將在 [1, 10] 范圍內(nèi)。
最終結(jié)果的分子和分母保證有效并且在32位int范圍內(nèi)。
解決方案:
我們需要仔細(xì)解析輸入字符串并對分?jǐn)?shù)進(jìn)行算術(shù)運(yùn)算。步驟如下:
-
解析輸入表達(dá)式:從表達(dá)式字符串中提取各個分?jǐn)?shù)。
計(jì)算結(jié)果:逐步添加或減去分?jǐn)?shù)。
簡化結(jié)果:將最終分?jǐn)?shù)轉(zhuǎn)換為其不可約形式。
讓我們用 php 實(shí)現(xiàn)這個解決方案:
592。分?jǐn)?shù)加法和減法
<?php // Example usage echo fractionAddition("-1/2+1/2"); // Output: "0/1" echo "\n"; echo fractionAddition("-1/2+1/2+1/3"); // Output: "1/3" echo "\n"; echo fractionAddition("1/3-1/2"); // Output: "-1/6" ?>
登錄后復(fù)制
解釋:
gcd 函數(shù):計(jì)算兩個數(shù)字的最大公約數(shù),這有助于簡化分?jǐn)?shù)。
addfractions 函數(shù):兩個分?jǐn)?shù)相加。它計(jì)算公分母,相應(yīng)地調(diào)整分子,將它們相加,然后簡化所得分?jǐn)?shù)。
fractionaddition 函數(shù):這是解析輸入表達(dá)式的主函數(shù),使用正則表達(dá)式提取所有分?jǐn)?shù),并使用 addfractions 函數(shù)迭代地將它們相加。
測試用例:
fractionaddition(“-1/2+1/2”) 返回 “0/1”.
fractionaddition(“-1/2+1/2+1/3”) 返回 “1/3”.
fractionaddition(“1/3-1/2”) 返回 “-1/6”.
此解決方案處理所有必需的操作,并為每個給定表達(dá)式返回正確的輸出。
聯(lián)系鏈接
如果您發(fā)現(xiàn)本系列有幫助,請考慮在 github 上給
存儲庫 一顆星,或在您最喜歡的社交網(wǎng)絡(luò)上分享該帖子?。您的支持對我來說意義重大!
如果您想要更多類似的有用內(nèi)容,請隨時關(guān)注我:
領(lǐng)英
github