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;
}