请帮我看下这题( vc)

来源:百度知道 编辑:UC知道 时间:2024/05/24 04:25:57
使用分支语句设计一个程序,要求输入年月日后,酸楚这天是这一年的第几天。运行是输出输入情况如下:
请输入日期(eg.2005 2 28): 2005 2 28
2005 年 2月 28 日 是2005年的第59天。
提示:主要闰年,四年一润,百年一润,四百年又一润。使用其break特性,尽量设计出比较简介的代码。。。

不用写完整个程序,只要写出关键的代码和条件就可以了,我刚刚自己写了个,只能输出每个月的某一天是一年的第几天,不能输出每年的某一天是那一年的第几天,而且代码量太大。(用的if。。else语句,switch的不会)
回复一楼:相对来讲比较大,因为并不是最简洁的
回复二楼:你的代码有问题

这么点代码还叫大。。。。。。 加日期格式验证
#include <iostream>
using namespace std;

bool isLeapYear(int y)
{
return (y%400==0 || (y%4==0 && y%100!=0));
}
bool isDateLegal(int y, int m, int d)
{
if(y<1 || (m<1 || m>12) || (d<1 || d>31))
return false;

if((m==2) && ((isLeapYear(y) && d>29) || (!isLeapYear(y)) && (d>28)))
{
return false;
}
switch(m)
{
case 4:case 6:case 9:case 11:
if(d>30)
return false;
default: break;
}
return true;
}
int getDays(int y,int m, int d)
{
int days = 0;
int DAY[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(isDateLegal(y, m, d))
{
for(int i=1;i<m;i++)
{
days += DAY[i-1];
}
days += d;
if(m>2 && isLeapYear(y))
days++;
}
else
{
days = -1;
}
return days;
}
void mai