calc the sum的一種利用棧的解法

2021-10-06 01:34:54 字數 1792 閱讀 1439

這道題解法很多,是遞迴演算法的一道很典型的例題,並且用字串來解效率也還可以(我也不知道時間複雜度多少算效率高,還沒學資料結構),用棧來解效率不高記憶體還大,僅僅為了滿足本人的好奇心而已~

不過我們可以先來複習一下什麼是棧

(以下是我對棧的理解)

棧(stack)是一種線性的表,只能在表末尾進行運算,比如push(壓入)和pop(刪除),可以把它想象成一種容器,下端封口,(比如杯子,只能在杯口操作)後放進去的東西可以先拿出來,先放進去的東西要最後才能拿出來。

我對棧的理解比較淺,但如果只是簡單的應用的話,這些也足夠了。

然後來看一下棧的用法

#include

#include

//標頭檔案

using

namespace std;

intmain()

目前會這些也就足夠用了,是一些比較基本的用法

接下來我們來看題了

所以一種比較簡單的方法就是使用字串啦。

不過我的好奇心比較強,剛好前一段時間了解到了棧,就像現學現賣,用棧解一下這個題試試。

應該是正確的,因為我在oj上是通過了的,雖然執行時間和記憶體很感人(暴風哭泣),不過如果有有漏洞的地方還是希望大家指出來啦~

int

getanswer

(stack<

char

> n,

int a)

else

if(mid.

top(

)<9+

'0')

//當棧的top仍是個位數時把這一位進上去

//為什麼這裡是9而不是10?

//因為ans的十位上的數字一定不會超過1

//要考慮進製後超過10的情況

//這裡是為了進製,而要把棧頂的元素取出來,進製後再放回去,因為無法直接對棧頂的元素操作

else

//直接放在棧中

//這一步ans要把十位的數字丟掉

ans = ans %10;

}}mid.

push

(char

(ans +

'0'));

//記住這裡要把最後一位放在棧中

if(mid.

size()

>

1)a =

getanswer

(mid,a)

;//遞迴,如果新的棧中不止一位數字,即輸入的字串每一位數字相加的和不是個位數

//那就需要繼續計算

if(mid.

size()

==1)return mid.

top();

//直到最後的結果是個位數,這時就可以把棧中的數字返回了

return a;

}

很長的**,效率也的確不高

上面的是用字串解的,下面的是我的這種演算法

不過我的好奇心已經滿足了,這波不虧。

對了,還有輸入輸出:

int

main()

//將所輸入字串中的每個字元按順序存在棧中

printf

("%c\n"

,getanswer

(n,a));

//a是用來記錄結果的

}return0;

}

每一種創傷,都是一種成熟

6.如果你準備結婚的話,告訴你一句非常重要的哲學名言 你一定要忍耐包容對方的缺點,世界上沒有絕對幸福圓滿的婚姻,幸福只是來自於無限的容忍與互相尊重。7.我的財富並不是因為我擁有很多,而是我要求的很少。8.不是某人使我煩惱,而是我拿某人的言行來煩惱自己。9.活在別人的掌聲中,是禁不起考驗的人。10.如...

每一種創傷,都是一種成熟

1.活著一天,就是有福氣,url 就該珍惜 url 當我哭泣我沒有鞋子穿的時候,我發現有人卻沒有腳。2.寧可自己去原諒別人,莫讓別人來原諒你。3.世界原本就不是屬於你,因此你用不著拋棄,要拋棄的是一切的執著。萬物皆為我所用,但非我所屬。4.別人可以違背因果,別人可以害我們,打我們,毀謗我們。可是我們...

快樂是一種品位,一種氣質。

這兩天很不爽,2月初,應該是寒冷的,可是杭州現在最高溫度達到了24度,確切的說今天的氣溫是13 24度,大太陽。暖和了,卻惶恐了。如果沒了季節之分,冬不冬,春不春,夏不夏,秋不秋,將多麼可怕。開啟qq氣象台,發現北方很冷,就杭州一帶很古怪。突然羨慕北方的人,享受著冬天。我覺得我都該裸奔了,熱啊!去年...