UvaOJ 694

 

       题目很简单,但是一开始却得到了Time Limit的结果,让人感到很诧异。仔细阅读发现,题目中有一个说明:

       Neither of these, A or L, is larger than 2,147,483,647 (the largest value that can be stored in a 32-bit signed integer).

    所以应该是A溢出造成了程序“死循环”,最终导致超时。更改后正确。

       #include <stdio.h>

int main()
{
	long long int A, a, limit, n = 0;
	while(scanf("%lld%lld",&A,&limit) && A!=-1 && limit!=-1)
	{
		long long int count = 0;
		a = A;
		n++;
		while(a != 1 && a <= limit)
		{
			if(a%2)
				a=3*a+1;
			else
				a=a/2;
			count++;
		}
		if(a <= limit)
			count++;
		printf("Case %lld: A = %lld, limit = %lld, number of terms = %lld\n",n,A,limit,count);
	}
	return 0;
}

你可能感兴趣的:(uva)