我想想看看大家的思路,我自己是这样想的:先判断出起始年和结尾年的日期是当年的第几天,然后再求之间相差的天数(当然要判断闰年拉)当然就是365OR366-起始年所在的第几天+之间相差的天数+结尾年所在天数的第几天
菜鸟求助
//这个程序好久以前就写了,不过没写出来,今天给她搞定了
//另外又goto了一把,暂时还想不到不用goto完美的解决办法
//这是书后一道题,不是楼主的题目,要求是输入一个日期,判断是本年的第几天
//已经考虑闰年问题
#include<iostream>
using namespace std;
int fun(int year,int month,int day); //计算天数函数
struct YEAR
{
int year;
int month;
int day;
}N;
int main()
{
cout<<"输入年月日,程序计算该日在本年中是第几天.";
cout<<"格式:2004 5 28\n";
LOOP:cout<<"输入一个年月日:";
cin>>N.year>>N.month>>N.day;
cout<<N.year<<"年"<<N.month<<"月"<<N.day<<"日,是今年第 "<<fun(N.year,N.month,N.day)<<" 天.\n";
cout<<"继续查询请按Y,退出请按任意键!\n";
if(cin.get()=='Y' || cin.get()=='y') goto LOOP;
return 0;
}
int fun(int year,int month,int day); //计算天数函数
{
int i,sum=0;
int years[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //一年所有月份
int yearr[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //一年所有月份(闰年情况)
if(year%4==0 && year%100!=0 || year%400==0) //如果是闰年...
{
for(i=0;i<(month-1);i++) //month-2才能显示正常:比如2004年366天,不然显示396天
sum=sum+yearr[i];
sum=sum+day; //sum等于该日在今天第多少天
return sum;
}
else //如果不是闰年
{
for(i=0;i<(month-1);i++)
sum=sum+years[i];
sum=sum+day;
return sum;
}
}
[此贴子已经被作者于2006-11-1 2:27:25编辑过]
[CODE]#include <iostream>
using namespace std;
int IsLeapYear(int y)
{ int leap=0;
if(y%4==0&&y%100!=0||y%400==0)
leap=1;
return leap;
}
int main()
{
int year1,month1,day1,year2,month2,day2;
int num_month1 = 0;
int num_month2 = 0;
int num_year = 0;
int array[] = {31,28,31,30,31,30,31,31,30,31,30,31};
cout<<"第一次输入年,月,日: ";
cin>>year1>>month1>>day1;
cout<<"第二次输入年,月,日: ";
cin>>year2>>month2>>day2;
int big_year = year1 >= year2 ? year1:year2;
int min_year = year1 <= year2 ? year1:year2;
for(int i = min_year;i < big_year;i++)
{
if(IsLeapYear(i))
num_year += 366;
else
num_year += 365;
}
for(int j = 1;j < month1;j++)
{
if(IsLeapYear(year1)&& 2 == j)
num_month1 += array[1]+1;
else
num_month1 += array[j-1];
}
for(int k = 1;k < month2;k++)
{
if(IsLeapYear(year2)&& 2 == k)
num_month2 += array[1]+1;
else
num_month2 += array[k-1];
}
int month_day_day = num_month2 - num_month1+day2 - day1;
if(month_day_day < 0)
month_day_day = -month_day_day;
cout<<"两个日期相差"<<num_year+month_day_day<<"天。"<<endl;
return 0;
}
[/CODE]