该怎么用C++解?我到底哪里写错了 ?


/*根据历法,凡是1、3、5、7、8、10、12月,每月31天;凡是4、6、9、11月,每月30天;2月闰年29天,平年28天。闰年的判断方法是:
1)如果年号能被400整除,此年为闰年;
2)如果年号能被4整除但不能被100整除,此年为闰年;
3)其他情况都不是闰年。
编程输入年、月,输出该月的天数。
*/
#include <iostream>
using namespace std;
int main()
{
    int year, mon, day;
    cin >> year >> mon;
    if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
    {
        if (mon == 2)
            day = 29;
    }
    else if (mon == 2) day = 28;
    else if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12)
        day = 31;
    else if (mon == 4 || mon == 6 || mon == 9 || mon == 11)
        day = 30;
    cout << day;
    return 0;}

if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
改为
if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))

&&的优先级高于||,你到底有什麽问题呢?

(year%4==0&&year%100!=0)||(year%400==0)
闰年判断
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
如果year % 400 == 0成立,那么后面的都不会运算,直接是true。
所以需要一个括号。