关于无穷大量的选择
在解題時候,通常有遇到設置為無窮大的情況。這時候通常用0x7fffffff來設置,他是計算機32位整數最大數,相當于INT_MAX.但是在很多時候這樣設置并不會是最佳的,還可能導致bug,這是由于我們有的時候希望無窮大+無窮大=無窮大,比如在prim算法或者Dijstra算法中對邊的松弛操作,這個時候INT_MAX隨便加上一個數就會溢出,從而導致結果錯誤。
事實上另外一個數字0x3f3f3f3f的十進制是1061109567,這與0x7fffffff是同一個數量級的。我們用0x3f3f3f來代替0x7fffffff可以滿足無窮大加無窮大依然是無窮大的條件,這樣可以避免災難性的錯誤。另外0x3f3f3f還可以使用memset函數批量賦值,例如要將數組dis[]設置為無窮大:
memset(dis,0x3f,sizeof(dis));
如果數組dis是long long 型,則上面語句將dis設置為4557430888798830399,若dis為int型,則上面語句將dis設置為1061109567無論在long long還是int,兩個無窮的和都不會爆。上面的0x3f是一個字節0x3f3f3f3f一共有四個這樣的字節。一般情況下,0x3f3f3f3f是一個設置無窮的不錯選擇。
總結
- 上一篇: 为什么民航单位免费给查胸部CT+为什么天
- 下一篇: @RequestMapping和@Get