強行刷段位第九天

2021-09-08 16:13:15 字數 3610 閱讀 5533

今天感覺感冒基本好了。

就是還有鼻涕。

這個部落格不像是用來記錄刷題的,好像是用來記錄感冒歷程的(笑哭)

就當寫日記了。。。反正沒什麼人看~

洗了個頭,掃了個地。

該買一些洗髮水什麼的了,這回病好了,抽時間要去買點東西了。

現在感覺渾身充滿了力量~又要開始間歇性躊躇滿志了!

想過年前拔牙,這樣過年就可以少吃點了。。。

突然有點捨不得減掉我的頭髮了。。。

因為前兩天買了個帽子,本來是為了萬一剪頭髮了不好看,可以戴著擋一擋。

結果發現這個帽子長捲髮戴著更合適一點。。。

不管了~年前肯定是要剪的,作為2019的斷捨離~

感冒好了話都變多了。。。

做題做題。

高精度第一題:

題目:

給出兩個正整數a和b,計算a-b的值。保證a和b的位數不超過500位。

輸入描述:

讀入兩個用空格隔開的正整數

輸出描述:

輸出a-b的值

樣例輸入:

3 12

樣例輸出:

-9

兩個正整數的位數不超過500位

我的答案:

這道題寫完通過的時候我一臉呆滯。。。

就。。。通過了???

我明明只是要提交一下,獲取一下出錯用例,然後接著寫啊。。。

我明明沒有寫0000001這種情況的處理啊。。。

好吧。。。

本著認真嚴謹的態度,我把去除0的工作加上了之後再次提交,成功通過,撒花花~

頭一次寫高精度,開始還是有點蒙,不過順著字串這個思路,暴力模擬下去還是不難想到的。

就醬。哦,對,之前出了個小菜雞沒見過的錯誤。說我的minus函式ambiguous。

查了一下原來是minus和庫函式重名,隨手改了一下名字就通過啦。以後長記性~

#include #include using namespace std;  //測試資料:19987787889 98776665

int mark(char a,char b,int alen,int blen) //需要輸出負號則返回1

arear--;

brear--; }

while(arear>=0)

arear--; }

flag--;

while(c[flag]==0)

for(i=flag;i>=0;i--)

else minuss(a,b,alen,blen);

return 0;

}

剛發出來就被kevin大神看見了,

告訴我不能像上面那樣獲取錯誤用例,只能按照題目來寫,正常機試提交只有乙個結果正確或者錯誤

這樣容易養成依賴,會覺得反正每次可以改錯誤樣例。。。

我還以為我這是正常操作那~(委屈.jpg)

那麼以後,就把各種情況都考慮好了再寫。自己把測試用例想完善,測試好了再提交~

也會像某kevin說的,每一次的錯誤都記錄一下,比如沒考慮到哪種情況等等。

高精度第二題:

題目:給出兩個正整數a和b,計算a+b的值。保證a和b的位數不超過500位。

輸入描述:

讀入兩個用空格隔開的正整數

輸出描述:

輸出a+b的值

樣例輸入:

3 12

樣例輸出:

兩個正整數的位數不超過500位

我的答案:

這題看似和上面一樣,其實不太一樣。

emmm

其實也一樣。

這題出現了兩個錯誤

1.同位的兩個數相加小於10的情況下忘了將記錄進製數的temp置0。導致接下來會加上了上一次的進製位。

2.這是加法,兩個加數地位一樣,假如兩個數的位數不同,不能只考慮前面的數比後面的長這種情況,還要考慮後面的比前面的長。

**:

#include #include using namespace std; 

void pluss(char a,char b,int alen,int blen)

else

arear--;

brear--; }

while(arear>=0)

else

arear--; }

while(brear>=0)

else

brear--; }

if(temp!=0) c[flag]=temp;

else flag--;

for(i=flag;i>=0;i--)

高精度第三題:

題目:

給出兩個正整數a和b,計算a*b的值。保證a和b的位數不超過500位。

輸入描述:

讀入兩個用空格隔開的正整數

輸出描述:

輸出a*b的值

樣例輸入:

3 12

樣例輸出:

兩個正整數的位數不超過500位

我的答案:

這個和前兩題還是有差別的。

想了很久,一直在糾結怎麼迴圈,才能把進製,當前的乘積加在一起。

就是沒觀察出來可以先加再進製這種方法。

kevin大神果然還是強強的。

我還是太嫩了。。。

自己還是沒抓到本質吧,主要是沒想到先都加進c裡,再統一進製這種辦法。

積累經驗吧。

kevin說得對,任何題目都是這樣,想一下假如人算的話,怎麼做,然後應用到電腦上,然後利用演算法和資料結構優化時間和空間複雜度。

就算是要模擬,也不能一模一樣的蠻幹。有腦子就要學會轉彎,學會轉彎就是能夠優化。

下面是kevin大神教給我的**:

(不到50行,乾乾淨淨的解決了問題,越來越覺得他真的好厲害。。。)

(學習的越多越覺得他棒棒。突然覺得我得好好努力,不然連大佬有多厲害都不知道)

#include #include using namespace std;

int c[1000000];

void multip(char a,char b,int alen,int blen) }

for(k=0;k=0;i--)

原來kevin真的有每天看我這種小弱雞的部落格。。。

突然緊髒。。。

怪不得昨晚夢見慌慌亂亂的參加考試。。。

加油內~

re刷題第九天

知識點 彙編硬編碼 題目給出了一堆十六進製制,轉換為彙編看下,發現第一句是push 0x666c,之後進行了一些異或,加操作,emmm。看不太懂。想起來push在這裡的十六進製制是0x68,所以把0x68後兩個位元組的內容提取出來就是flag 額。這個題說實話我不明白在考察什麼東西,我tcl。題目是...

集訓第九天

今天就看了乙個迪傑斯特拉演算法,他的方法就是從乙個頂點出發,找出這個到與它相關頂點的所有路徑,然後在找出其中最小的,作為基量,一次類推 如下 include define inf 0x7fffffff define maxn 50 int matrix maxn maxn void dijkstra...

開課第九天

畫布 1今天是開課第九天,上午講了關於方法的題,下午講了新知識,嗯,今天有點熱,下面就是本寶寶今天的收穫 1 過載 方法名相同,引數列表不同叫做過載,和返回值型別無關。過載方法名必須一致,引數列表不同,和返回值型別無關。引數列表不同 個數不同,順序不同,型別不同 方法過載的時候編譯器會自動找到最適合...