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;
}
int res=0;
while(a<MAXN){
a*=a;
++res;
}
修改:
while(a<MAXN/a){
a*=a;
++res;
}