震驚,超出數據範圍有這麼多種方法,活久見!

int的溢出

case 1:

一不小心爆int:
int a=1e5,b=1e5,x=2;
int c=x+a*b;

case 2:

好了,好了,我注意到了,a*b溢出了嘛,我在左邊改爲long long 好伐?
long long c=x+a*b;

case 3:

好吧,我去查了下,這個與編譯原理有關,a*b,已經溢出了,無可救藥了。賦給c時已經生米煮成熟飯了。
但我又不想全部換爲long long ,強制轉換一波。
 long long c=x+a*b*(long long)(1);
——————————————————分割線—————————————————————————

好吧,還是有毛病,還是那句話在乘以(long long )(1) 時,a*b已經生米熟飯了。
正確的姿勢:
 long long c=x+(long long )(1) *a*b;
或者  long long c=x+(long long )a*b;


long long 的溢出

case 1:

作si代碼:
  long long a=2;
    int res=0;
    while(a<MAXN){
       
  a*=a;
       
   ++res;
   
}
修改:
while(a<MAXN/a){
a*=a;
++res;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章