震惊,超出数据范围有这么多种方法,活久见!

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章