关于#C++#的问题,如何解决?

编程环境:C++
题目:

img


代码:

img


考虑到题目给的范围是[1,100000000],所以我用了long double。
结果:

img

为什么有个超时了?

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。