计算天数

struct date
  {
      int year;
      int month;
      int day;
  };


  int checkyear(int y)
  {
      if(y%4==0 && y%100!=0 || y%400==0) //是闰年
          return 1;
      else
          return 0;
  }

  int cal(struct date d1,struct date d2)
  {
      int i;
      int sum=0;
      //算差几年
      if(d1.year>=d2.year){
          for(i=d2.year;i<d1.year ;i++){
              if(checkyear(i)==1) sum+=366;
              else sum+=365;
          }
         //算月份,小的年份要减,大的年份要加
        for(i=1;i<d1.month;i++){//大的年份要加
            if(i==2){
                if(checkyear(d1.year)==1) sum+=29;
                else sum+=28;
            }
            else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10) sum+=31;
            else sum+=30;
        }
        sum+=d1.day;

        for(i=1;i<d2.month;i++){//小的年份要减
            if(i==2){
                if(checkyear(d2.year)==1) sum-=29;
                else sum-=28;
            }
            else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10) sum-=31;
            else sum-=30;
        }
        sum-=d2.day;
      }


      else{//d1.year<d2.year
          for(i=d1.year;i<d2.year ;i++){
              if(checkyear(i)==1) sum+=366;
              else sum+=365;
          }
          //算月份,小的年份要减,大的年份要加
        for(i=1;i<d2.month;i++){//大的年份要加
            if(i==2){
                if(checkyear(d2.year)==1) sum+=29;
                else sum+=28;
            }
            else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10) sum+=31;
            else sum+=30;
        }
        sum+=d2.day;

        for(i=1;i<d1.month;i++){//小的年份要减
            if(i==2){
                if(checkyear(d1.year)==1) sum-=29;
                else sum-=28;
            }
            else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10) sum-=31;
            else sum-=30;
        }
        sum-=d1.day;

      }
        return sum;
  }

  void main()
  {
      struct date *d1,*d2;
      d1=(struct date*)malloc(sizeof(struct date));
      d2=(struct date*)malloc(sizeof(struct date));
      int res;
      printf("input the first date:");
      scanf("%d",&d1->year);
      scanf("%d",&d1->month);
      scanf("%d",&d1->day);
      printf("input the second date:");
      scanf("%d%d%d",&d2->year,&d2->month,&d2->day);
      res=cal(*d1,*d2);
      printf("%d\n",res);
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值