2016-03-11 2 views
0

Вопрос: год с 366 днями называется високосным годом. Год - это високосный год, если он делится на четыре (например, 1980 год), за исключением того, что он не является високосным годом, если он делится на 100 (например, 1900); однако это високосный год, если он делится на 400 (например, 2000). Не было никаких исключений до введения григорианского календаря 15 октября 1582. Напишите программу, которая запрашивает у пользователя год и вычисляет, является ли этот год високосным годом.Программа високосного года, похоже, не работает

Это то, что у меня есть до сих пор, и программа, похоже, не работает в течение многих лет больше, чем 1582. Может ли кто-нибудь помочь мне, почему? Благодаря кучу

using namespace std; 

int main() 
{ 
cout<< "Pleas enter a year: " <<endl; 
int year = 0; 
cin >> year; 

if (year <= 1581) 
{ 
    if (year % 4 == 0) 
    { 
     cout << "It's a leap year, wow! " << endl; 
    } 

    else 
    { 
     cout << "It's not a leap year " << endl; 

    } 
} 

else if (year > 1581) 
{ 
    if (year % 4 == 0) 
    { 
     if (year % 100 == 0) 
     { 
      cout<< "It is not a leap year " << endl; 
     } 
     else if (year % 400 == 0) 
     { 
      cout<< "It is a leap year, Wow!" << endl; 
     } 
    } 

} 

else 
{ 
    cout<< "You entered a wrong year number "<< year<< endl; 
} 

return 0; 
} 
+2

C++? Тег как таковой, если он есть. – Tiny

+0

Что мне нужно, чтобы войти, чтобы добраться до последнего 'else'? – Biffen

ответ

0

Вы пропускаете число случаев в обращении лет после 1581.

  • печать "Не високосный год", если (год% 4 == 0)
  • Третий случай, когда год, делящийся на 4, не делится на 100 или 400

Это так просто, как вы только что не написали код, который запускается, например, в 2004 году.

1

Вы пропали без вести 2 другое заявление

using namespace std; 

int main() 
{ 
cout<< "Pleas enter a year: " <<endl; 
int year = 0; 
cin >> year; 

if (year <= 1581) 
{ 
    if (year % 4 == 0) 
    { 
     cout << "It's a leap year, wow! " << endl; 
    } 

    else 
    { 
     cout << "It's not a leap year " << endl; 

    } 
} 

else if (year > 1581) 
{ 
    if (year % 4 == 0) 
    { 
     if (year % 100 == 0) 
     { 
      cout<< "It is not a leap year " << endl; 
     } 
     else if (year % 400 == 0) 
     { 
      cout<< "It is a leap year, Wow!" << endl; 
     } 
     // <----------- Here you are missing an else 
    } 
    // <----------- Here you are missing an else 
} 

else 
{ 
    cout<< "You entered a wrong year number "<< year<< endl; 
} 

return 0; 
} 
1

Вы делаете это очень сложно. Я не думаю, что вы должны заботиться о том, год больше, чем 1582 или нет (для 4-значного числа), при условии, что високосный год является один, который является:

• делящегося на 400
ИЛИ
• НЕ делится на 100 И делится на 4.
Использование ненужных вложенных ifs может сделать ваш код длинным и подверженным ошибкам. Попробуйте этот метод:

#include<iostream.h> 
int main(){ 
    int y=0; 
    cout << "Enter a year\n"; 
    cin >> y; 
    cout <<"\n"<<y; 
    if(y%400==0 || (y%100!=0 && y%4==0)) 
    cout <<" is a leap year"; 
    else 
    cout <<" is not a leap year"; 
    return 0; 
} 
0

Я предлагаю

if ( ((year % 400) == 0) 
    || ( ((year % 4) == 0) // or (year & 0x3) == 0 
     && ( (year <= 1581) 
      || ((year % 100) != 0)))) 
    cout << "It's a leap year, wow! " << endl; 
else 
    cout << "It's not a leap year " << endl; 

или

if ( ((year % 4) == 0) // or year & 0x3 == 0 
    && ( (year <= 1581) 
     || ((year % 100) != 0) 
     || ((year % 400) == 0))) 
    cout << "It's a leap year, wow! " << endl; 
else 
    cout << "It's not a leap year " << endl; 
0

без проверки, если год> 1582

#include<iostream> 
using namespace std; 

int main() 
{ 
    int year; 
    cout<< "Please enter a year: " <<endl; 
    cin >> year; 

    if(year%25 && !(year&3) || !(year&15)) 
     cout << "It's a leap year!" << endl; 
    else 
     cout << "It's not a leap year!" << endl; 

    return 0; 
} 
Смежные вопросы