首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算不工作天数的简单程序

计算不工作天数的简单程序
EN

Stack Overflow用户
提问于 2014-08-11 02:30:40
回答 1查看 125关注 0票数 2

我正在尝试写一个简单的程序,它输出给定日期的一天,使用1/1/0001作为星期六。我已经写好了程序,但是我花了大约4个小时才发现一些错误,这使得我的答案是错误的。正确答案可以在这里找到。http://www.timeanddate.com/date/durationresult.html?d1=1&m1=1&y1=1&d2=1&m2=1&y2=400&ti=on

下面是我的程序:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

long long int leap_days, days;

long long int *no_leap_years(int day, int month, long long int year){
    leap_days = (year-1)/4;
    leap_days -= (year-1)/100;
    leap_days += (year-1)/400;

    int is_leap;

    if(!(year%400)){
        is_leap = 1;
    } else if(!(year%100)){
        is_leap = 0;
    } else if(!(year%4)){
        is_leap = 1;
    } else {
        is_leap = 0;
    }

    printf("Leap year - %d\n", is_leap);
    printf("Leap days - %lld\n", leap_days);
    if(is_leap){
        if(month>2) leap_days++;
        else if(month==2){
            if(day>28) leap_days++;
        }
    }
    printf("Leap days - %lld\n", leap_days);
    return &leap_days;
}

long long int *no_of_days(int day, int month, long long int year){
    long long int leap_days = *no_leap_years(day, month, year);
    days = leap_days + (365*(year-1));
    if(month>1) days+=31;
    if(month>2) days+=28;
    if(month>3) days+=31;
    if(month>4) days+=30;
    if(month>5) days+=31;
    if(month>6) days+=30;
    if(month>7) days+=31;
    if(month>8) days+=31;
    if(month>9) days+=30;
    if(month>10) days+=31;
    if(month>11) days+=30;
    days+=day;
    printf("total - %lld\n", days);
    return &days;
}

char *day_computer(int day, int month, long long int year){
    long long int days = *no_of_days(day, month, year);
    printf("total - %lld\n", days);
    days %= 7;
    printf("remain - %lld\n", days);
    if(days==1) return "Saturday";
    else if(days==2) return "Sunday";
    else if(days==3) return "Monday";
    else if(days==4) return "Tuesday";
    else if(days==5) return "Wednesday";
    else if(days==6) return "Thursday";
    else return "Friday";
}

int main()
{
   int  dd = 1;
   int mm = 1;
   long long int yy = 400;

   printf("%s\n", day_computer(dd, mm, yy));

   return 0;
}

根据该网站,从1/1/1到1/1/400的总no.of天数应该是145,735天,但根据我的代码,它是145732天。我找不到我失踪了3天的地方。请帮帮我。

你可以使用这个在线编辑器来编译我的程序。http://www.compileonline.com/compile_c_online.php

EN

回答 1

Stack Overflow用户

发布于 2014-08-11 03:43:44

在线日历程序是正确的;但是,您的代码也是正确的。问题出在您要计算的具体时间段。

您的代码针对闰年进行了调整:每4年调整一次,除了几个世纪(不是)和四个世纪(同样是)。然而,这两种“百年一遇”的调整在Julian Calendar中都没有观察到。

朱利安改革

延长了七个月,并用每四年增加一次的中间日取代了中间月,每四年增加一次。

对于公元前46年-1582年10月4日这段时间,你应该使用儒略的方法来计算闰年。对于该“截止日期”(1582年10月15日)之后的日期,您可以使用公历(当前)计算。

如果不对整个世纪的闰年进行2次调整,您将获得与在线日历相同的结果。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25231762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档