|
|
发表于 2022-10-20 11:36:12
|
显示全部楼层
本楼为最佳答案
本帖最后由 jackz007 于 2022-10-21 01:09 编辑
计算天数首先应该考虑是否跨年,两种情况应该区别对待:
- #include <stdio.h>
- #define LEAP(Y) (! ((Y) % 400) || (! ((Y) % 4) && (Y) % 100))
- int mday(int y , int m)
- {
- int a[12] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , r ;
- r = a[m - 1] ;
- if(m == 2 && LEAP(y)) r ++ ;
- return r ;
- }
- int main(void)
- {
- long int Nian , Yue , Ri , sum = 0 ;
- long int Xnian , Xyue , Xri ;
- int e , i ;
- printf(" 请输入您的生日(例如: 1998,05,16) : ") ;
- scanf("%d,%d,%d", & Nian , & Yue , & Ri) ;
- printf("请输入今年的日期(例如: 2021,10,23) : ") ;
- scanf("%d,%d,%d", & Xnian , & Xyue , & Xri) ;
- if(Xnian > Nian || Xnian == Nian && Xyue > Yue || Xnian == Nian && Xyue == Yue && Xri >= Ri) {
- if(Xnian == Nian) {
- if(Xyue == Yue) sum = Xri - Ri ;
- else for(sum = Xri - Ri ; Yue < Xyue ; Yue ++) sum += mday(Nian , Yue) ;
- } else {
- for(sum = Xri - Ri , i = 1 ; i < Yue ; i ++) sum -= mday(Nian , i) ;
- for(; Nian < Xnian ; Nian ++) sum += LEAP(Nian) ? 366 : 365 ;
- for(Yue = 1 ; Yue < Xyue ; Yue ++) sum += mday(Xnian , Yue) ;
- }
- printf(" 您已经在这个地球上生活了: %ld 天\n" , sum) ;
- } else {
- fprintf(stderr , "日期输入错误\n") ;
- }
- }
复制代码
编译、运行实况:
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 请输入您的生日(例如: 1998,05,16) : 2021,1,1
- 请输入今年的日期(例如: 2021,10,23) : 2022,10,20
- 您已经在这个地球上生活了:657 天
- D:\[00.Exerciese.2022]\C>x
- 请输入您的生日(例如: 1998,05,16) : 2021,10,20
- 请输入今年的日期(例如: 2021,10,23) : 2022,10,20
- 您已经在这个地球上生活了:365 天
- D:\[00.Exerciese.2022]\C>x
- 请输入您的生日(例如: 1998,05,16) : 2020,1,1
- 请输入今年的日期(例如: 2021,10,23) : 2020,3,1
- 您已经在这个地球上生活了:60 天
- D:\[00.Exerciese.2022]\C>x
- 请输入您的生日(例如: 1998,05,16) : 2021,12,31
- 请输入今年的日期(例如: 2021,10,23) : 2022,1,1
- 您已经在这个地球上生活了:1 天
- D:\[00.Exerciese.2022]\C>
复制代码 |
|