今天感覺感冒基本好了。
就是還有鼻涕。
這個部落格不像是用來記錄刷題的,好像是用來記錄感冒歷程的(笑哭)
就當寫日記了。。。反正沒什麼人看~
洗了個頭,掃了個地。
該買一些洗髮水什麼的了,這回病好了,抽時間要去買點東西了。
現在感覺渾身充滿了力量~又要開始間歇性躊躇滿志了!
想過年前拔牙,這樣過年就可以少吃點了。。。
突然有點捨不得減掉我的頭髮了。。。
因為前兩天買了個帽子,本來是為了萬一剪頭髮了不好看,可以戴著擋一擋。
結果發現這個帽子長捲髮戴著更合適一點。。。
不管了~年前肯定是要剪的,作為2019的斷捨離~
感冒好了話都變多了。。。
做題做題。
高精度第一題:
題目:給出兩個正整數a和b,計算a-b的值。保證a和b的位數不超過500位。
輸入描述:讀入兩個用空格隔開的正整數
輸出描述:輸出a-b的值
樣例輸入:3 12
樣例輸出:兩個正整數的位數不超過500位-9
我的答案:
這道題寫完通過的時候我一臉呆滯。。。
就。。。通過了???
我明明只是要提交一下,獲取一下出錯用例,然後接著寫啊。。。
我明明沒有寫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 過載 方法名相同,引數列表不同叫做過載,和返回值型別無關。過載方法名必須一致,引數列表不同,和返回值型別無關。引數列表不同 個數不同,順序不同,型別不同 方法過載的時候編譯器會自動找到最適合...