编程环境:C++
题目:
为什么有个超时了?
4的倍数的年数减去100的倍数的年加上400倍数的年即为闰年个数
#include<iostream>
using namespace std;
int main()
{
int count4,count100,count400;
int a, b;
cin >> a >> b;
count4 = b/4-(a-1)/4; //4的倍数的年
count100 = b/100-(a-1)/100; //100倍数的年
count400 = b/400-(a-1)/400; //400倍数的年
cout << count4 - count100 + count400;
}
这道题不用枚举哟,因为他只求个数,而闰年每四年一次,是有规律的,直接数学方法做就好了
有两种可能。
一种是int型的范围不够,如果int型是2字节的,那么i的最大值为32767,此时继续增加整型溢出i变为负数。若b大于32767,则i永远小于b,导致死循环,于是超时。这种情况需要把i的类型改成long int。
如果int型是4字节的,没有整型溢出,那么有可能是运算开销较大导致超时。浮点数的运算比整型运算耗时,浮点数和整数比大小时需要隐式类型转换也需要耗时,所以可以把所有变量的类型都改为unsigned long int。