我突然发现这道题如果输入特别大的数字会引发奇妙的反应...
查看原帖
我突然发现这道题如果输入特别大的数字会引发奇妙的反应...
645451
封禁用户楼主2022/6/6 22:07

这道题目我使用了long存储,但是只要超出了long的范围变成了负数,就会发生连锁反应。代码:

#include<iostream>
#include <cmath>
using namespace std;

int main(){
    long a;
    cin >> a;
    while (a!=1)
    {
        cout << a;
        if (a%2 == 0)
        {
            cout << "/2=";
            cout << a/2 << endl;
            a/=2;
        }
        else
        {
            cout << "*3+1=";
            cout << a*3+1 << endl;
            a=a*3+1;
        }
    }
    cout << "End" << endl;
}

改进方法:
1.使用long long类型,但不能根除问题(虽然过题目的话long就够了 ,但谁也说不准有人会拿这个程序输入什么 但是如果输入特别大的数字,还是会出现问题,所以不能根除)
2.加一个条件判断(把用户卡住),这个方法比较简单,但是用你程序的人可能会拿大刀追你。

3.请教各位大佬,有没有别的方法,谢谢。

求关注、求点赞

2022/6/6 22:07
加载中...