描述:计算某个日期指定天数之前的日期。
流程如下:
输入年(数值大于0):如2009;
输入月(数值大于0且小于13):如3;
输入日(数值大于0且小于32):如26;
输入一个天数(数值大于0):如1307。
计算2009年3月26日的1307天前的日期。
备注:
指定天数不能过大,原则上不能使输出的年小于1;
如需添加输入函数,请自行修改year=2009; month=3; day=1; days=1307;部分;
由于还未生成为正式程序,可能存在BUG;
如果问题,请在此反馈。我将及时修改。

int main()
{
int year, month, day;
int days;
int sum;
year=2009;
month=3;
day=26;
days=1307;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("你输入的月份有误。");break;
}
sum=sum+day-1;
if(year%400==0||(year%100!=0&&year%4==0))
{
if(month>2)
sum++;
}
days=days-sum;
while(days>365)
{
if((year-1)%400==0||(year-1)%100!=0&&(year-1)%4==0)
{
days=days-366;
}
else
{
days=days-365;
}
year=year-1;
}
while(365>=days>0)
{
days=days-1;
day=day-1;
if(day==0)
{
if(month==1)
{
month=12;
day=31;
year=year-1;
}
else
{
if(month==5||month==7||month==10||month==12)
day=30;
else if(month==2||month==4||month==6||month==8||month==9||month==11)
day=31;
else if(month==3)
//特殊情形
{
if(year%400==0||year%100!=0&&year%4==0)
day=29;
else
day=28;;
}
month=month-1;
}
}
}
printf("计算得到的日期是%d年%月%d日", year, month, day);
return 0;
}