【两日一练】学习记录
题目
- 编写程序,输入一个日期和一个整数n,输出从该日期起经过n天后的日期。
思路
首先计算输入日期距离年初的天数,然后加上距离多少的天数n,得到距离年初的总天数。这个数有可能大于365,但是没关系,每次减一个月的天数,不断的减,每减一次,就对月份加一。
代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> int isleap(int year); int main() { int year,month,day,data,sum=0,days; int n; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i; printf("请输入日期:"); scanf("%d %d %d",&year,&month,&day); printf("请输入经过的天数:"); scanf("%d",&n); data=isleap(year); //先计算出输入日期距离年初的天数,存入sum for(i=1;i<month;i++) { sum+=a[i]; } sum+=day; if(data && month>2) { sum++; } days=sum+n; while(days<0)//如果出现负值时,先以年为单位往前推 { year=year-1; days=days+365; if(isleap(year)) { days++; } } for(i=1;days>a[i];)//不断对days做减法,直到days小于某个月的天数 { days=days-a[i]; if(2==i && isleap(year)) { days--; } i++; if(13==i)//说明天数大于365天,此时已经减了12个月,所以年份加1,月份回到一月 { i=1; year++; } } printf("经过%d天后,日期是:%d-%d-%d\n",n,year,i,days); system("pause"); } int isleap(int year) { if(0==year%4 && 0!=year%100 || 0==year%400) return 1; else return 0; }
执行结果