~cpp
// The 3n + 1 problem
// UVa ID : 100
#include <iostream>
using namespace std;
int cycle_length(int input);
int main()
{
int input1, input2;
while (cin >> input1 >> input2)
{
int i;
int max_count = -1;
int temp = 0;
// 입력의 순서가 절대 뒤바뀌면 안된다!!
cout << input1 << " " << input2 << " ";
// 앞에 들어오는 입력이 뒤에 입력보다 더 클 경우 (for문 에러 방지)
if (input1 > input2)
{
int swap = input1;
input1 = input2;
input2 = swap;
}
for (i = input1; i <= input2; i++)
{
temp = cycle_length(i); // cycle legnth 찾기
if (temp > max_count)
max_count = temp; // 큰 수를 max_count로
}
cout << max_count << endl;
}
return 0;
}
// cycle length 구하기
int cycle_length(int input)
{
int argument = input; // 전달인자로 넘어온 수 저장
int count = 0; // 카운트 변수
while (true)
{
// 종료 조건
if (argument == 1)
{
count++;
break;
}
// LSB가 0이면 짝수, 1이면 홀수이다.
if ((argument & 1) == 0)
{
// 나누기 2는 right shift를 한 번 하는 것과 같다.
argument >>= 1;
count++;
}
else
{
// 홀수라면 반드시 다음은 짝수가 온다.
argument = 3 * argument + 1;
argument >>= 1;
count += 2;
}
}
return count;
}