鉴于n<=10^9,即int行将会超过界限,如果是使用http://xuluan.iteye.com/admin/blogs/2029208
页面的代码,运行结果将会出错。当n=999999999时,第一次3n+1就会越界;
因而本次n使用了_int64(long long)型定义,这就很好地解决了越界问题
#include<stdio.h> int main(){ __int64 n; int count = 0; scanf("%I64d",&n); while(n > 1){ if(n % 2 == 1){ n = 3 * n + 1; }else{ n /= 2; } count += 1; } printf("%d\n",count); return 0; }
附加说明:
long long型只能在支持c99标准的编译器上使用,如果需要使用long long型那就_int64代替即可;
long long 输入,lld%; 输出,lld%;
_int64 输入,%I64d 输出,%I64d;
usigned _int64 输入,%I64u 输出,%I64u;
个人测试:_int64 和 unsigned _int64的输入、输出可以互用;(代码就不贴了,有兴趣的可以试下)
32位机器:
int 4字节 [-2^31,2^31) -2147483648~2147483647 10^9
long 4字节 [-2^31,2^31) -2147483648~2147483647 10^9
long long 8字节 [-2^63, 2^63) -9223372036854775808~9223372036854775807 10^19