我突然发现这道题如果输入特别大的数字会引发奇妙的反应...

B2077 角谷猜想

jiangmuran @ 2022-06-06 22:07:27

这道题目我使用了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.请教各位大佬,有没有别的方法,谢谢。

求关注、求点赞


by jiangmuran @ 2022-06-06 22:08:17

我疯了,明明在编辑界面打一个\是换行,怎么发出来就没了???


by 3a51_ @ 2022-06-06 22:12:48

高精度


by 晴空一鹤 @ 2022-06-06 22:15:03

???

如果有人给你输入日文,你的程序除了终止还能做什么(

而且评测机不会这么凶残的


by 晴空一鹤 @ 2022-06-06 22:17:36

实在不行用Python


by Zvelig1205 @ 2022-06-07 06:50:04

这算tlqtj吗?


by jiangmuran @ 2022-06-07 11:13:11

我发现如果用long long的话输到缓冲区的最大值也能处理。。。。 所以:long long无敌


|