[题解]《C语言入门100例》(第19例) 日期

推荐专栏

1.算法题解

2.《C语言入门100例》(第19例) 日期

相关习题

1185. 一周中的第几天

在这里插入图片描述
Constraints:

The given dates are valid dates between the years 1971 and 2100.

分析:

  1. 题目给定的年份范围是[1971,2100],然后我们可以根据力扣的数据测试得出1971年1月1日是Friday,当然不嫌麻烦的话也可以去查日历。
  2. 既然知道初始条件,那目前最简单暴力的方法就是直接计算他们相差有多少天。
  3. 因为一周的周期为七天,所以要计算出这一天是一周的第几天我们只需计算 daycnt % 7,但又因为因为初始日期是Friday,所以daycnt的初始条件是4。

代码如下:

char Week[7][10] = {
    
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

char * dayOfTheWeek(int day, int month, int year){
    
    
	//daycnt的初始条件
    int cnt = 4;
    //记录每月的天数
    int Month[] = {
    
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    for(int y = 1971; y < year; y++){
    
    
    	//判断是否为闰年
        if(y % 100 != 0 && y % 4 == 0 || y % 400 == 0)
            cnt+=366;
        else
            cnt+=365;
    }
    for(int i = 1; i < month; i++){
    
    
        //判断2月的天数
        if(i == 2){
    
    
            if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0)
                cnt += 29;
            else
                cnt+=Month[i];
        }
        else
            cnt+=Month[i];
    }
    cnt+=day;
    cnt%=7;

    return Week[cnt];
}

1154. 一年中的第几天

在这里插入图片描述
在这里插入图片描述
这道题相对上题较为简单,只需计算本年的天数,唯一难受的地方就是他给的是字符串,但将字符串转化为整型数据的问题已经有人帮我们解决了,所以我们只需拿来用就行,atoi()函数是一个将表示数字的字符串转化为整型数据的一个函数,转化之后一切都简单起来了。

代码如下:

int dayOfYear(char * date){
    
    
    int daycnt = 0;
    int year, month, day;
    int Month[] = {
    
    0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    char* str = (char*)malloc(12);
    //转化年份
    strcpy(str, date);
    str[4] = '\0';
    year = atoi(str);
	//转化月份
    strcpy(str, date + 5);
    str[2] = '\0';
    month = atoi(str);
	//转化日期
    strcpy(str, date + 8);
    day = atoi(str);
	//计算天数
    for(int i = 1; i < month; i++){
    
    
        if(i == 2){
    
    
            if(year % 100 != 0 && year % 4 == 0 || year % 400 == 0)
                daycnt += 29;
            else
                daycnt += Month[i];
        }
        else
            daycnt += Month[i];
    }
    daycnt += day;
    return daycnt;
}

猜你喜欢

转载自blog.csdn.net/qq_53060585/article/details/121437103