首页 > 试题广场 >

计算日期到天数转换

[编程题]计算日期到天数转换
  • 热度指数:173919 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
根据输入的日期,计算是这一年的第几天。
保证年份为4位数且日期合法。
进阶:时间复杂度:,空间复杂度:

输入描述:

输入一行,每行空格分割,分别是年,月,日



输出描述:
输出是这一年的第几天
示例1

输入

2012 12 31

输出

366
示例2

输入

1982 3 4

输出

63
#include <stdio.h>

int main() {
    int y, m, d, day = 0;
    int date[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    scanf("%d%d%d", &y, &m, &d);

    if (m <= 2) {
        for (int i = 0; i < m - 1; i++)
            day += date[i];

        day += d;
        printf("%d", day);
    } else if (m > 2) {
        for (int i = 0; i < m - 1; i++)
            day += date[i];
        day += d;
        if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
            printf("%d", day + 1);
        else
            printf("%d", day);

    }
    return 0;
}
发表于 2024-08-22 21:24:17 回复(0)
#include <stdio.h>

int IsLeapYear(int year)
{
    if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
    return 1;
    else return 0;
}

int main() {
    int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

    int My_year;
    scanf("%d",&My_year);
    int My_month;
    scanf("%d",&My_month);
    int My_day;
    scanf("%d",&My_day);
    if(IsLeapYear(My_year)) month[1]++;
    int sum = 0;
    for(int i = 0;i < My_month - 1;i++)
    {
        sum += month[i];
    }
    sum += My_day;
    printf("%d",sum);
    return 0;
}

发表于 2024-07-02 23:03:18 回复(0)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main() {
    int a, b;
    int year, month, day;
    int sum = 0;
    scanf("%d %d %d", &year, &month, &day);
    int days[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//平年
    int days2[] = { 31,29,31,30,31,30,31,31,30,31,30,31 };//闰年
    for (int i = 1; i < month; i++)
    {
        if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0)))
        {
            sum += days2[i - 1];
        }
        else
            sum += days[i - 1];
    }
    printf("%d", sum + day);
    return 0;
}

发表于 2024-04-24 23:30:46 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int calculate_day(int year, int mouth)
{
    int days;
    switch (mouth) {
        case 1:
            days = 31;
            break;
        case 2:
            if (year % 400 == 0) {
                days = 29;
            } else if ((year % 4 == 0) && (year % 100 != 0)) {
                days = 29;
            } else{
                days = 28;
            }
            break;
        case 3:
            days = 31;
            break;
        case 4:
            days = 30;
            break;
        case 5:
            days = 31;
            break;
        case 6:
            days = 30;
            break;
        case 7:
            days = 31;
            break;
        case 8:
            days = 31;
            break;
        case 9:
            days = 30;
            break;
        case 10:
            days = 31;
            break;
        case 11:
            days = 30;
            break;            
        case 12:
            days = 31;
            break;
    }

    return days;
}


// 4年一润,闰年28天,平时29天,1 3 5 7 8 10 12 共31天,2 4 6 9 11 共30天
int main() {
    int year;
    int mouth;
    int day;
    int dates[12];
    int maxday = 0;

    while (scanf("%d %d %d", &year, &mouth, &day) != EOF) { // 注意 while 处理多个 case
        // 64 位输出请用 printf("%lld") to 
        memset(dates, 0, sizeof(dates));
        for (int i = 1; i <= 12; i++) {
            dates[i - 1] = calculate_day(year, i);
            // printf("%d ", dates[i - 1]);
        }
        // printf("\n");
        for (int i = 1; i < mouth; i++) {
          maxday += dates[i - 1];  
        }
        maxday += day;
        printf("%d\n", maxday);
    }
    return 0;
}

发表于 2024-04-09 22:23:36 回复(0)
#include <stdio.h>

int leapyear(int year)//判断是否为闰年
{
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

int MonthDay(int year, int month, int day)//用数组存储每月的天数
{
    int daysmonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    //是闰年就修改二月的值
    if (leapyear(year))
    {
        daysmonth[2] = 29;
    }

    int DayCount = day;//初始化天数为当前给定天数
    for (int i = 1; i < month; ++i)//遍历每月的天数累加到给定天数上
    {
        DayCount += daysmonth[i];
    }

    return DayCount;
}


int main()
{
    int year, month, day;
    scanf("%d %d %d", &year, &month, &day);
    int size = MonthDay(year, month, day);
    printf("%d\n", size);

    return 0;

}

发表于 2024-03-03 14:57:11 回复(0)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int function(int year)
{
    if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    int year = 0;
    int month = 0;
    int day = 0;
    int a = 0;
    int num = 0;
    scanf("%d %d %d", &year, &month, &day);
    a=function(year);
    if (a == 1)
    {
        switch (month)
        {
        case 12:num += 30;
        case 11:num += 31;
        case 10:num += 30;
        case 9:num += 31;
        case 8:num += 31;
        case 7:num += 30;
        case 6:num += 31;
        case 5:num += 30;
        case 4:num += 31;
        case 3:num += 29;
        case 2:num+=31;
        }
        printf("%d", num + day);
    }
    else
    {
        switch (month)
        {
        case 12:num += 30;
        case 11:num += 31;
        case 10:num += 30;
        case 9:num += 31;
        case 8:num += 31;
        case 7:num += 30;
        case 6:num += 31;
        case 5:num += 30;
        case 4:num += 31;
        case 3:num += 28;
        case 2:num += 31;
        }
        printf("%d", num + day);
    }
    return 0;
}
编辑于 2024-01-06 14:19:37 回复(1)
#include <stdio.h>
int isrun(int year)//润年规则,4润百不润,400也润
{
    if(year%4==0 && year%100 !=0 || year%400 ==0)
        return 1;
    return 0;
}

int math(int arr[],int month)
{
    int num =0;
    for(int i =0;i<month-1;i++)
    {
        num +=arr[i];
    }
    return num;
}

int num_day(int year, int month ,int day)
{
    int arr1[12]={31,28,31,30,31,30,31,31,30,31,30,31};//非润年天数

    int num =0;
    int flag = isrun(year);
    if(flag)//如果是闰年
    {
        arr1[1] = 29;
        num =math(arr1,month)+day;
    }
    else
    {
        num =math(arr1,month)+day;
    }
    return num;
}

int main()
{
    int year = 0;
    int month = 0;
    int day =0;
    scanf("%d %d %d",&year,&month,&day);
    int ret = num_day(year,month,day);
    printf("%d",ret);
    return 0;
}
发表于 2023-12-10 18:21:52 回复(0)
#include <stdio.h>

int year(int n)
{
    if((n%4==0&&n%100!=0)||n%400==0)
        return 1;
    return 0;
}

int main() {
    int arr[3];
    int day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    for(int i = 0;i<3;i++)
    {
        scanf("%d",&arr[i]);
    }
    int ret = arr[2];
    if(year(arr[0]))
    {
        day[1] = 29;
    }
    for(int i = 0;i<arr[1]-1;i++)
    {
        ret += day[i];
    }
    printf("%d\n",ret);
    return 0;
}
发表于 2023-10-13 20:29:02 回复(0)
#include <stdio.h>
//暴力方法
int main() 
{
    int year;
    int month;
    int day;
    scanf("%d %d %d",&year,&month,&day);
    int sum =0;
    //1 3 5 7 8 10 12 ——31天
    //4 6 9 11        ——30天
    //闰年2月         ——29天
    //平年2月         ——28天

    //如果year是闰年 2000 11 15
    if((year%4==0&&year%100!=0)||(year%400==0))
    {
        
      switch(month)
      {

        case 1:
            sum=day;
            break;
        case 2:
            sum=31+day;
            break;
        case 3:
            sum=31+29+day;
            break;
        case 4:
            sum=31+29+31+day;
            break;
        case 5:
            sum=31+29+31+30+day;
            break;
        case 6:
            sum=31+29+31+30+31+day;
            break;
        case 7:
            sum=31+29+31+30+31+30+day;
            break;
        case 8:
            sum=31+29+31+30+31+30+31+day;
            break;
        case 9:
            sum=31+29+31+30+31+30+31+31+day;
            break;
        case 10:
            sum=31+29+31+30+31+30+31+31+30+day;
            break;
        case 11:
            sum=31+29+31+30+31+30+31+31+30+31+day;
            break;
        case 12:
            sum=31+29+31+30+31+30+31+31+30+31+30+day;
            break;

      }

    }
   else 
   {
   
   
        
      switch(month)
      {

        case 1:
            sum=day;
            break;
        case 2:
            sum=31+day;
            break;
        case 3:
            sum=31+28+day;
            break;
        case 4:
            sum=31+28+31+day;
            break;
        case 5:
            sum=31+28+31+30+day;
            break;
        case 6:
            sum=31+28+31+30+31+day;
            break;
        case 7:
            sum=31+28+31+30+31+30+day;
            break;
        case 8:
            sum=31+28+31+30+31+30+31+day;
            break;
        case 9:
            sum=31+28+31+30+31+30+31+31+day;
            break;
        case 10:
            sum=31+28+31+30+31+30+31+31+30+day;
            break;
        case 11:
            sum=31+28+31+30+31+30+31+31+30+31+day;
            break;
        case 12:
            sum=31+28+31+30+31+30+31+31+30+31+30+day;
            break;

      }
   }
    
    printf("%d",sum);
    return 0;
}

发表于 2023-08-16 18:55:36 回复(0)
#include <stdio.h>

int main()
{
    int year,month,day;
    scanf("%d %d %d",&year,&month,&day);
   
    int arr[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    //闰年
    int i = 0;
    int sum = 0;
    if((year%400==0)||((year%4==0)&&(year%100!=0)))
    {
        for(i=0;i<month-1;i++)
        {
            sum +=arr[i];
        }
        if(month>=3)
            sum = sum+1+day;
        else
            sum = sum+day;
    }
    //非闰年
    else
    {
        for(i=0;i<month-1;i++)
        {
            sum += arr[i];
        }
        sum = sum+day;
    }
    printf("%d",sum);
    return 0;
}
发表于 2023-08-03 22:21:10 回复(0)
#include <stdio.h>

int main() {
    int month_day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    int year, month, day;
    scanf("%d %d %d",&year, &month, &day);
    if(year%400==0 || (year%4==0 && year%100!=0)){
            month_day[1]++;
    }
    int res=0;
    for(int i=0; i<month-1; i++){
        res+=month_day[i];
    }
    res+=day;
    printf("%d",res);


    return 0;
}

发表于 2023-03-30 16:57:57 回复(0)
#include<stdio.h>

int main()
{
	int month_day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };

	int year = 0;
	int month = 0;
	int day = 0;

	scanf("%d%d%d", &year, &month, &day);

	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
	{
		month_day[1] = 29;
	}

	int count = 0;

	for (int i = 0; i < month - 1; i++)
	{
		count += month_day[i];
	}
	count += day;
	printf("%d\n", count);

	return 0;
}


发表于 2023-01-30 23:12:42 回复(0)
#include<stdio.h>

int main()
{
    int year=0,month=0,day=0;
    scanf("%d %d %d",&year,&month,&day);
    int n=0;
    //判断月份是否小于等于2
    if(month<=2)
    {
        if(month==1)
        {
            printf("%d",day);
        }
        else
        {
            printf("%d",day+31);
        }
    }
    else
    {
        //判断是不是闰年
        if((year%4==0&&year%100!=0)||(year%400==0))
        {
            //是闰年,2月29天
            n=31+29;
        }
        else
        {
            n=31+28;
        }
        
        //七月之前包括七月
        if(month<=7)
        {
            //3 5 7 31
            month--;
            while((month-2)>0)
            {
                if(month%2==1)//奇数月
                {
                    n=n+31;
                }
                else
                {
                    n=n+30;
                }
                month--;
            }
            printf("%d ",n+day);
        }
        else//七月之后
        {
            month--;
            n=n+31*3+30*2;
            while((month-7)>0)
            {
                if(month%2==1)//奇数月
                {
                    n=n+30;
                }
                else
                {
                    n=n+31;
                }
                month--;
            }
            printf("%d ",n+day);
        }
        
    }
    
    return 0;
}
我的解法好菜
发表于 2022-09-05 18:10:10 回复(1)
#include<stdio.h>
int panduan(int year)
{
    if((year%4==0&&year%100!=0)||(year%400==0&&year%100==0))
        return 0;
    else
        return 1;
}
int main()
{
    int year,month,day,sum=0;
    scanf("%d %d %d",&year,&month,&day);
        int ret=panduan(year);
    int brr[]={31,28,31,30,31,30,31,31,30,31,30,31};
    if(ret==0)
        brr[1]++;
    for(int i=0;i<month-1;i++)
    {
        sum+=brr[i];
    }
    sum+=day;
    printf("%d",sum);
    return 0;
}


发表于 2022-08-16 17:18:01 回复(1)
int main() {
    int year, month, day;
    scanf("%d %d %d", &year, &month, &day);
    int arr[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            arr[1] = 29;
        }
        int sum = 0;
    for (int a = 0; a < month-1; a++) {
         sum += arr[a];
    }
    sum += day;
    printf("%d", sum);

}
发表于 2022-08-08 19:39:11 回复(0)
#include<stdio.h>
int main()
{
    int y = 0;
    int m = 0;
    int d = 0;
    scanf("%d %d %d", &y, &m, &d);
    int sum = 0;
        // 首元素为0 使后面月份与下标对应
        // 因为12月份循环不会进入 所以只需11个月的天数
    int day[12] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30};
        // 闰年二月加一天
    if((y%4==0 && y%100!=0) || y%400==0)
    {
            day[2] += 1;
    }
    for(int i = 0;i < m;i++)
    {
        sum += day[i];
    }
        // 循环结束加上天数
        // 12月的天数就是输入的d
    sum += d;
    printf("%d\n", sum);
    return 0;
}

发表于 2022-07-12 21:45:38 回复(0)
#include<stdio.h>

int main()
{
    int leap_year[] = {31,29,31,30,31,30,31,31,30,31,30,31};
    int noneleap_year[] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int year, mon, day, sum_day;
    year = mon = day = 0;
    scanf("%d %d %d ", &year, &mon, &day);
    if(year%4 == 0 && year%100 != 0 || year%400 == 0)
    {
        sum_day = 0;
        for(int i = 0; i<mon-1; i++)
        {
            sum_day += leap_year[i];
        }
        sum_day  += day;
        printf("%d", sum_day);
    }
    else 
    {
        sum_day = 0;
        for(int i = 0; i<mon-1; i++)
        {
            sum_day += noneleap_year[i];
        }
        sum_day  += day;
        printf("%d", sum_day);
    }
    return 0;
}

发表于 2022-06-29 10:25:01 回复(0)
#include <stdio.h>
#include <stdlib.h>

static int is_leap_year(int year)
{
    return ((year%4==0 && year%100!=0)||(year%400==0));
}

int get_day(int y,int m, int d)
{
    int day = 0,i = 0;
    int md[12] ={31,28,31,30,31,30,31,31,30,31,30,31};
    if(is_leap_year(y)) md[1] = 29;
    for(i = 0; i < (m-1);i++)
    {
        day += md[i];
    }
    day +=d;
    printf("%d\n",day);
    return 0;
}

int main(void)
{
    int year,month,day;
    while(scanf("%d %d %d",&year,&month,&day)!=EOF)
    {
        get_day(year, month, day);
    }
    return 0;
}
发表于 2022-06-18 17:06:00 回复(0)

#include <stdio.h>

int is_leap_year(int year)
{
    if ((year % 4 == 0 && year % 100 !=0) || (year % 400 == 0) )
        return 1;
    return 0;
}
int main()
{
    int month_day[] = {0 ,31 ,28 ,31 ,30 ,31 ,30 ,31 ,31 ,30 ,31 ,30 , 31};
    int year,month,day;
    while( ~scanf("%d %d %d",&year, &month, &day) )
    {
        int total_day = day;
        if( is_leap_year(year) == 1 && month > 2)
        {
            total_day++;
        }
        for(int i = 0; i<month; i++)
        {
            total_day += month_day[i];
        }
        printf("%d\n", total_day);
    }
    return 0;
}

发表于 2022-04-26 16:54:17 回复(0)

问题信息

难度:
36条回答 33716浏览

热门推荐

通过挑战的用户

查看代码
计算日期到天数转换