用什么储存x才不会爆啊!!才25分!!!求解!!

B2077 角谷猜想

dongtian @ 2022-11-13 23:36:15

#include<stdio.h>
int main()
{
    int x,y;
    scanf("%d",&x);
    y=x;
    if(x!=1)
    {
        while(y%2!=0)
        {
            y=x*3+1;
            printf("%d*3+1=%d\n",x,y);
            x=y;
        }
        while(y%2==0)
        {
            y=x/2;
            printf("%d/2=%d\n",x,y);
            x=y;
        }
    }
    if(x=1)
    printf("End");
    return 0;
}

by Luban @ 2022-11-13 23:43:36

如果你的int不够大,可以换成long long类型,%d改为%lld


by Ja50nY0un9_as_AgNO3 @ 2022-11-14 00:35:26

@dongtian 您的问题在于第7行的if应是while。

不然很快就会结束程序。


by Ja50nY0un9_as_AgNO3 @ 2022-11-14 00:36:19

@Light_Of_Wisdom 这题int是能过的。


by Luban @ 2022-11-14 00:37:37

@Ja50nY0un9 草,人傻了,我以为楼主问的是那啥问题)))

那说明数据造的不错?冰雹猜想不是会出现数字激增吗(((,润了


by Ja50nY0un9_as_AgNO3 @ 2022-11-14 00:40:40

@Light_Of_Wisdom 是会激增,但是不至于从2e6激增到2e9。

而且我觉得出题人也没想卡这个东西。


by Ja50nY0un9_as_AgNO3 @ 2022-11-14 00:50:02

刚才亲测,2621439可以爆破int上限,然而超出了数据范围(悲


by dongtian @ 2022-11-14 21:34:32

@Ja50nY0un9 大神666!!!我以为是int不够储存,不过if为什么提前结束啊??


by Ja50nY0un9_as_AgNO3 @ 2022-11-14 21:37:56

@dongtian 因为if里面的东西只执行一次,然而可能有多次奇偶切换,然后您就寄了。

Tips:这玩意连x=3 都过不了。


by dongtian @ 2022-11-14 21:55:37

@Ja50nY0un9 谢谢!!虽然现在还是不懂,但是以后应该可以理解。


by A_Learning_Hornet @ 2023-02-26 13:38:49

不开long long见珂珂!


|