国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【每日撓頭算法(4)】字符串相加|字符串相乘

這篇具有很好參考價(jià)值的文章主要介紹了【每日撓頭算法(4)】字符串相加|字符串相乘。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


一、字符串相加

點(diǎn)我直達(dá)~

【每日撓頭算法(4)】字符串相加|字符串相乘

思路:模擬豎式加法

  • 1.將兩個(gè)字符串從右往左開(kāi)始進(jìn)行相加,使用一個(gè)變量ans表示進(jìn)位,如果兩個(gè)字符串的個(gè)位加法和大于10,那么讓進(jìn)位+1,個(gè)位和再%10,然后將結(jié)果存入到新的字符串strRet
  • 2.兩個(gè)字符串的十位和十位繼續(xù)相加,并且需要加上個(gè)位的進(jìn)位ans,步驟同1
  • 3.這樣不斷相加,假如任意一個(gè)字符串的位數(shù)加完了,另一個(gè)字符串的位數(shù)未加完,比如:123+11,那就將該字符串連同上一位的進(jìn)位ans加上并復(fù)制到新的字符串strRet中,注意,在代碼的計(jì)算時(shí),應(yīng)該是123+011,11前面的’0’是需要補(bǔ)位的
  • 4.最后將strRet逆置即可得到我們想要的結(jié)果。

具體代碼如下:

寫(xiě)法1:

class Solution {
public:

    string addStrings(string num1, string num2)
    {
        int end1 = num1.size() - 1;
        int end2 = num2.size() - 1;
        string strRet;
        int ans = 0;

        while (end1 >= 0 && end2 >= 0)
        {
            int sum = (num1[end1]-'0')+(num2[end2]-'0') + ans;
            strRet += (sum % 10 + '0');
            ans = sum / 10;
            --end1;
            --end2;
        }

        while(end1 >= 0)
        {
            int sum = ((num1[end1] - '0' + ans));
            strRet += ( (sum%10) + '0');
            ans = sum/10;
            --end1;
        }

        while(end2 >= 0)
        {
            int sum = ((num2[end2] - '0' + ans));
            strRet += ( (sum%10) + '0');
            ans = sum/10;
            --end2;
        }

        if(ans!=0)
        {
            strRet +=( ans + '0');
        }

        reverse(strRet.begin(), strRet.end());
        return strRet;
    }
};

寫(xiě)法2:

class Solution {
public:
    string addStrings(string num1, string num2) 
    {
        int i = num1.length() - 1, j = num2.length() - 1, add = 0;
        string ans = "";
        while (i >= 0 || j >= 0 || add != 0) 
        {
            int x = i >= 0 ? num1[i] - '0' : 0;
            int y = j >= 0 ? num2[j] - '0' : 0;
            int result = x + y + add;
            ans.push_back('0' + result % 10);
            add = result / 10;
            i -= 1;
            j -= 1;
        }
        // 計(jì)算完以后的答案需要翻轉(zhuǎn)過(guò)來(lái)
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

二、字符串相乘

點(diǎn)我直達(dá)~

【每日撓頭算法(4)】字符串相加|字符串相乘

思路:模擬豎式乘法

字符串相乘的思路與字符串相加的思路類(lèi)似

  • 1.任意取一個(gè)字符串作為被乘數(shù),如果該字符串的長(zhǎng)度比另一個(gè)字符串短,則需要在不足的位數(shù)上補(bǔ)’0’
  • 2.兩個(gè)字符串從個(gè)位開(kāi)始相乘,所得結(jié)果如果大于10,則使用變量ans來(lái)保存進(jìn)位,然后將個(gè)位的乘積%10,結(jié)果保存到新的字符串strRet中。
  • 3.繼續(xù)重復(fù)2.的過(guò)程,在此期間如果任意一個(gè)字符串的長(zhǎng)度遍歷完了, 那么就將另一個(gè)字符串的剩余的位數(shù)+進(jìn)位ans復(fù)制保存到strRet新的字符串中。這個(gè)相加的過(guò)程可以調(diào)用字符串想加的函數(shù)完成。
  • 4.最后逆置strRet字符串即可得到我們想要的結(jié)果。

具體代碼如下:

class Solution {
public:
    //將其中一個(gè)作為被乘數(shù),將每一位拆分出來(lái)進(jìn)行相乘,然后把結(jié)果累計(jì)起來(lái)
    //其中,被乘數(shù)的位數(shù)如果大于2位,需要先提前加上0
    string multiply(string num1, string num2) 
    {
       string strret;
       if(num2[0] == '0' || num1[0] == '0')
       {
           return strret+='0';
       }
       int end1 = num1.size() -1;
       int end2 = num2.size() -1;

       for(int i = end2;i>=0;--i)
       {
           string cur;
           int add = 0;
           //num2是被乘數(shù),需要補(bǔ)0
           for(int j = end2;j>i;--j)
           {
               cur+='0';
           }

            //開(kāi)始計(jì)算乘積
            for(int j = end1;j>=0;--j)
            {
                int val1 = (num1[j]-'0');
                int val2 = (num2[i]-'0');
                int sum = val1*val2+add;
                cur+=(sum%10 + '0');
                add = sum/10;
            }

            //這里如果進(jìn)位不等于0,還要把進(jìn)位加上
            if(add!=0)
            {
                cur+=(add + '0');
            }
            //計(jì)算結(jié)果需要逆置
            reverse(cur.begin(),cur.end());

            //然后累加起來(lái)
            strret = addStrings(strret,cur);
       }
        return strret;
    }

        string addStrings(const string &num1, const string &num2) 
        {
            int i = num1.length() - 1, j = num2.length() - 1, add = 0;
            string ans = "";
            while (i >= 0 || j >= 0 || add != 0) {
                int x = i >= 0 ? num1[i] - '0' : 0;
                int y = j >= 0 ? num2[j] - '0' : 0;
                int result = x + y + add;
                ans.push_back('0' + result % 10);
                add = result / 10;
                i -= 1;
                j -= 1;
        }
        
        // 計(jì)算完以后的答案需要翻轉(zhuǎn)過(guò)來(lái)
        reverse(ans.begin(), ans.end());
        return ans;
    }
};

總結(jié)

通過(guò)寫(xiě)今天的字符串相加|字符串相乘,我大致學(xué)會(huì)了如何將字符串轉(zhuǎn)化為豎式的方法進(jìn)行相加/相乘。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-483543.html

到了這里,關(guān)于【每日撓頭算法(4)】字符串相加|字符串相乘的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • LeetCode·每日一題·415. 字符串相加·模擬

    LeetCode·每日一題·415. 字符串相加·模擬

    作者:小迅 鏈接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/ 來(lái)源:力扣(LeetCode) 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 ? 題意 - 給定二個(gè)字符串,計(jì)算它們的和并同樣以字符串形式返回。 直接從

    2024年02月16日
    瀏覽(22)
  • 【力扣每日一題】2023.7.17 字符串相加

    【力扣每日一題】2023.7.17 字符串相加

    題面很簡(jiǎn)單,就是要將兩個(gè)字符串看作是數(shù)字然后相加,將最后結(jié)果轉(zhuǎn)為字符串返回即可. 看到這題我的第一反應(yīng)是直接轉(zhuǎn)成數(shù)字再相加再轉(zhuǎn)成字符串,像是這樣: 但這樣就不符合題目要求了( 這不是主要原因 )?,并且遇到大數(shù)就無(wú)法轉(zhuǎn)成整型也無(wú)法計(jì)算了. 所以需要像是我們列豎式

    2024年02月16日
    瀏覽(24)
  • 【算法詳解】力扣415.字符串相加

    力扣鏈接:力扣415.字符串相加 給定兩個(gè)字符串形式的非負(fù)整數(shù) num1 和num2 ,計(jì)算它們的和并同樣以字符串形式返回。 你不能使用任何內(nèi)建的用于處理大整數(shù)的庫(kù)(比如 BigInteger), 也不能直接將輸入的字符串轉(zhuǎn)換為整數(shù)形式。 示例 1: 輸入:num1 = “11”, num2 = “123” 輸出:

    2024年01月22日
    瀏覽(31)
  • 【每日算法】【205. 同構(gòu)字符串】

    【每日算法】【205. 同構(gòu)字符串】

    ??博客主頁(yè):CSDN博客主頁(yè) ??本文由 我是小狼君 原創(chuàng),首發(fā)于 CSDN?? ??學(xué)習(xí)專欄推薦:面試匯總 ??游戲框架專欄推薦:游戲?qū)嵱每蚣軐???點(diǎn)贊 ?? 收藏 ?留言 ??,如有錯(cuò)誤請(qǐng)指正 ?? 未來(lái)很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳? 老規(guī)矩,先介紹一下 Unity 的科

    2024年02月11日
    瀏覽(26)
  • leetcode 43.字符串相乘

    leetcode 43.字符串相乘

    ?? leetcode鏈接:字符串相乘 思路: 代碼:

    2024年02月09日
    瀏覽(25)
  • LeetCode —— 43. 字符串相乘

    LeetCode —— 43. 字符串相乘

    ????????????????????????Take your time ! ???????????????????????? ??個(gè)人主頁(yè):??????大魔王?????? ??所屬專欄:??魔王的修煉之路–C++?? 如果你覺(jué)得這篇文章對(duì)你有幫助,請(qǐng)?jiān)谖恼陆Y(jié)尾處留下你的 點(diǎn)贊 ??和 關(guān)注 ??,支持一下博主

    2024年02月20日
    瀏覽(18)
  • 如何高效解決“字符串相乘“問(wèn)題?

    如何高效解決“字符串相乘“問(wèn)題?

    ??個(gè)人主頁(yè):?? :???初階牛??? ??推薦專欄1: ??????C語(yǔ)言初階 ??推薦專欄2: ??????C語(yǔ)言進(jìn)階 ??個(gè)人信條: ??知行合一 金句分享: ?你要狠下心來(lái)去努力,努力變成一個(gè)很厲害的人.? 本題牛牛寫(xiě)了很久,起初對(duì)每次相乘的結(jié)果就進(jìn)位處理了,最后還需要考慮 錯(cuò)位相

    2024年02月12日
    瀏覽(19)
  • LeetCode 43題:字符串相乘

    LeetCode 43題:字符串相乘

    給定兩個(gè)以字符串形式表示的非負(fù)整數(shù)? num1 ?和? num2 ,返回? num1 ?和? num2 ?的乘積,它們的乘積也表示為字符串形式。 注意: 不能使用任何內(nèi)置的 BigInteger 庫(kù)或直接將輸入轉(zhuǎn)換為整數(shù)。 示例 1: 示例?2: 提示: 1 = num1.length, num2.length = 200 num1 ?和? num2 ?只能由數(shù)字組成。

    2024年02月11日
    瀏覽(24)
  • 【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    【string題解 C++】字符串相乘 | 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)單詞

    目錄 字符串相乘 題面 錯(cuò)誤記錄 Way1 拆分成“先乘后加” 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 反思 Way2 用數(shù)組 思路 實(shí)現(xiàn) 時(shí)空復(fù)雜度分析 翻轉(zhuǎn)字符串III:翻轉(zhuǎn)字符串中的單詞 題面 錯(cuò)誤記錄 思路1 遍歷找單詞 實(shí)現(xiàn) 思路2 暴力解法 實(shí)現(xiàn) 力扣(LeetCode)官網(wǎng) - 全球極客摯愛(ài)的技術(shù)成長(zhǎng)平

    2024年02月07日
    瀏覽(21)
  • LeetCode_字符串_簡(jiǎn)單_415.字符串相加

    給定兩個(gè)字符串形式的非負(fù)整數(shù) num1 和num2,計(jì)算它們的和并同樣以字符串形式返回。 你不能使用任何內(nèi)建的用于處理大整數(shù)的庫(kù)(比如 BigInteger), 也不能直接將輸入的字符串轉(zhuǎn)換為整數(shù)形式。 示例 1: 輸入:num1 = “11”, num2 = “123” 輸出:“134” 示例 2: 輸入:num1 = “

    2024年02月01日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包