#include <cstdio>#include <algorithm>usingnamespacestd;
int main ()
{
int i, j;
while ( scanf ("%d %d", &i, &j) != EOF )
{
int temp_i = i;//用于记录输入顺序int temp_j = j;
if ( i > j )
{
swap (i, j);
}
int max_cycle_length = 0;
int cycle_length;
while ( i <= j ) {
unsignedint n = i;
cycle_length = 1;
while ( n != 1 ) {
if ( n % 2 == 1 ) {
n = 3 * n + 1;
n >>= 1;
//or n = n >> 1;//is much faster than n = n / 2;
cycle_length += 2;
}
else {
n /= 2;
cycle_length++;
}
}
if ( cycle_length > max_cycle_length )
{
max_cycle_length = cycle_length;
}
i++;
}
printf ("%d %d %d\n", temp_i, temp_j, max_cycle_length);
}
return0;
}
0 < n < 1,000,000,但 3 * 827370449 + 1 = 2482111348 整型:表示整数、字符和布尔值的算术类型合称为整型(integral type) int、stort 和 long 都默认为带符号型。要获得无符号型则必须制定该类型为unsigned,比如unsigned long。unsigned int类型可以简写为unsigned。
int、unsigned、long、unsigned long 、double的数量级最大都只能表示10亿,即它们表示十进制的位数不超过10个,即可以保存所有9位整数。而short只是能表示5位。对于浮点数而言使用double类型基本上不会有错。在float类型中隐式的精度损失是不能忽视的,双精度计算的代价相对于单精度可以忽略。事实上,在有些机器上,double类型比float类型的计算要快得多。float型只能保证6位有效数字,而double型至少可以保证15位有效数字(小数点后的数位),long double型提供的精度通常没有必要,而且还要承担额外的运行代价。
题目#include <cstdio>#include <algorithm>using namespace std;int main (){ int i, j; while ( scanf ("%d %d", &i, &j) != EOF ) { int temp_i = i;//用于记录输入顺序 int temp_j = j;