字符串经典题之大数相加
生活随笔
收集整理的這篇文章主要介紹了
字符串经典题之大数相加
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題目
字符串相加
解答
相加時按照對應為相加即可,注意有的時候相加可能會導致進位,所以我們可以定義一個變量next,next取值為0表示不進位,next取值為1表示進位。拿出對應位的字符的時候,將他們加起來(也包括next),然后判斷相加的結果是否大于10,如果大于10把next設置為1,否則設置為0,。每算完一個結果,就把結果push進一個string里。最后將結果反轉。
需要注意的時候,加完之后要判斷一下這個進位是否歸為0,因為有時會出現(xiàn)9999+1=10000這種情況,如果不判斷話,結果就編程了0000了
具體的細節(jié)實現(xiàn),見代碼注釋
代碼
class Solution { public:string addStrings(string num1, string num2) {string ret;//返回結果字符串int end1=num1.size()-1;int end2=num2.size()-1;//end1和end2分別用來從后向前掃描num1和num2字符串int next=0;//標記進位while(end1>=0 || end2>=0)//掃描{int ret1=0,ret2=0;//用來接受對應單個位置的字符if(end1>=0){ret1=num1[end1--]-'0';//轉換為數字}if(end2>=0){ret2=num2[end2--]-'0';//轉換為數字}int retch=ret1+ret2+next;//單位相加注意加進位if(retch>=10)//如果大于10表示,下一位要進位{retch-=10;//留下個位數字next=1;}else{next=0;//如果不大于10,就不僅為}ret+=(retch+'0');//轉化為字符,并尾插到返回字符數組中}if(next==1)//有一種特殊情況就是9999+1,所以特殊處理{ret+='1';}reverse(ret.begin(),ret.end());//由于是尾插所以注意反轉return ret;} }; 新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的字符串经典题之大数相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML中Div、span、label标
- 下一篇: Linux下的sort排序命令详解(二)