题目很简单,但是一开始却得到了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; }