先看乙個小技巧(將數字反過來輸出。)
int n =
63945
;int ans =0;
while
(n) ans = ans *
10+ n %
10, n /=10
;// 輸出 54936
將其進行擴充套件
#include
#include
intbase_conversion
(char
* s,
int n,
int m)
intmain()
#include
const
int big =
1000
;int
main()
main函式是整個程式的入口,包括評測系統,,這個0代表的是「正常結束」,所以在演算法競賽中, 請總是讓main函式返回0, 以免評測機系統錯誤的認為程式異常退出了。
注意變數資料範圍的問題,可能一不小心就溢位了。
資料型別
資料範圍
備註char
-128 ~ +127 (1 byte)
注意這個範圍,如果儲存了不在這個範圍內的字元,就會輸出亂碼!
short
-32767 ~ + 32768 (2 bytes)
記住正負三萬多
unsigned short
0 ~ 65536(2 bytes)
差不多的長度,只是範圍往後移動了而已,正六萬多。
int
-2147483648 ~ +2147483647 (4 bytes)
記住能儲存正負2.1* 10^10左右
unsigned int
0 ~ 4294967295 (4 bytes)
記住能儲存4.2* 10^10左右
long
==int
long long
-9223372036854775808 ~ +9223372036854775807 (8 bytes)
記住能儲存9.2 * 10^19左右
double
1.7 * 10^308 (8 bytes)
注意優先順序的問題,有時候就是這些小細節導致整個程式出bug
優先順序運算子說明
結合性1
::範圍解析
自左向右
2++ --
字尾自增/字尾自減
()括號
陣列下標
.成員選擇(物件)
−>
成員選擇(指標)
3++ --
字首自增/字首自減
自右向左
+ −
加/減! ~
邏輯非/按位取反
(type)
強制型別轉換
*取指標指向的值
&某某的位址
sizeof
某某的大小
new, new
動態記憶體分配/動態陣列記憶體分配
delete, delete
動態記憶體釋放/動態陣列記憶體釋放
4.* ->*
成員物件選擇/成員指標選擇
自左向右
5* / %
乘法/除法/取餘
6+ −
加號/減號
7<< >>
位左移/位右移
8< <=
小於/小於等於
> >=
大於/大於等於
9== !=
等於/不等於10&
按位與11
^按位異或12|
按位或13
&&與運算
14||
或運算15
?:三目運算子
自右向左16=
賦值+= −=
相加後賦值/相減後賦值
*= /= %=
相乘後賦值/相除後賦值/取餘後賦值
<<= >>=
位左移賦值/位右移賦值
&= ^= |=
位與運算後賦值/位異或運算後賦值/位或運算後賦值
17throw
丟擲異常18,
逗號自左向右
演算法競賽入門經典 紫書 第四章
關於判斷素數的幾點 該函式有嚴重缺點 不能用於n 1和n較大的情況 在n接近int的最大值時 若i 46340時,i i 2147395600 若i 46341時,i i 2147488281超過了int的最大值,溢位變成了負數,就會繼續進行下去 intis prime int n return1 ...
第四章 函式和遞迴例題
例題4 1 組合數 輸入非負整數m,n輸出組合數c n,m m n 20 分析 從普通思維出發先算n 再算m 再算 n m 最終我們會發現,20!以及超出整數所能表示的範圍。因此此題不宜使用這種方法。經分析,我們發現n 和m 或者 n m 有重疊的部分,可以約去。因此得到如下解法 includeus...
第四章總結
1.對貪心演算法的認識 貪心演算法在求解問題時,不從整體上考慮,而是得到某種意義上的區域性最優解,做出當前看來是最好的選擇。每次的選擇都會依賴之前作出的選擇,而對後面的選擇不會產生影響。它具有最優子結構的性質,即問題的最優解包含其子問題的最優解。但貪心演算法不是對於所有的問題都能得到整體最優解,最重...