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