3n+1问题
描述
猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1.例如:3→10→5→16→8→4→2→1.
输入
输入n,输出变换的次数。n<=10^9。
样例输入
3
样例输出
7
代码展示
/*
3n+1问题
*/
#include<iostream>
using namespace std;
int main()
{
int count = 0;
long long n ; //防止溢出
cin >> n;
while (n > 1) {
if (n % 2 == 1) n = n * 3 + 1;
else n /= 2;
count++;
}
cout << count << endl;
return 0;
}
结论
本题主要需要注意n的上限10^9只比int的上界要稍微小一点,所以存在溢出的可能性。所以要使用 long long 类型来解决可能溢出的问题,其范围是-263~263-1。