警示:不开long long会TLE为什么

B2077 角谷猜想

luozezhong @ 2024-03-31 10:46:33

//会TLE
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(bool b=n!=1;b=n!=1;){
        if(n%2)cout<<n<<"*3+1="<<n*3+1<<endl,n*=3,n++;
        else cout<<n<<"/2="<<n/2<<endl,n/=2;
        if(n==1)b=0;
    }
    cout<<"End";
    return 0;
}
//AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
    long long n;//注意
    cin>>n;
    for(bool b=n!=1;b=n!=1;){
        if(n%2)cout<<n<<"*3+1="<<n*3+1<<endl,n*=3,n++;
        else cout<<n<<"/2="<<n/2<<endl,n/=2;
        if(n==1)b=0;
    }
    cout<<"End";
    return 0;
}

至于为什么,咱也不知道,咱也不敢问


by __little__Cabbage__ @ 2024-03-31 10:48:03

超范围了


by Zskioaert1106 @ 2024-04-07 19:41:20

可能是因为溢出之后不是1就一直循环,所以就TLE。


by Jimmy_Cudo @ 2024-04-25 20:11:43

想多了,自己在LINUX G++ 的环境下一试就会发先,哎?没爆,所以......(不明所以)


by Star_Sky_ @ 2024-05-21 15:29:16

@luozezhong 因为int在爆掉之后会变成负数,所以有可能死循环……


by Star_Sky_ @ 2024-05-21 15:30:37

@luozezhong 出题人应该是找了一个数,在爆了int之后会出现一个死循环


|