c语言自动生成时间计算天数,C语言(给出日期和天数,算出之前日期)

注意 : 给定天数最大为365

#include

int date_map(int month, int sum);

int main()

{

int i;

int year, month, day;

int days;

int sum;

printf("Please input year month day days : ");

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

// 计算今年开始到现在的天数

sum = date_map(month, -1) + day;

if (year%400 == 0 || (year%100 != 0 && year%4 == 0))

{

if (month > 2) sum++;

}

printf("The before of %d day is : ", days);

// 天数(days)小于今年开始到现在的天数(sum)

if (days < sum)

{

if (days < day)

{

// 天数(days)小于当前月份的天数(day)

printf("year:%d, month:%d, day:%d\n", year, month, (day-days));

} else {

// 天数大于当前月份的天数(day)小于今年开始到现在的天数(sum)

i = sum - days;

month = date_map(-1, i);

printf("year:%d, month:%d, day:%d\n", year, month, (i - date_map(month, -1)));

}

} else {

// 天数(days)大于今年开始到现在的天数(sum)

i = 365 - days + sum;

month = date_map(-1, i);

//if (month == 12) i--;

printf("year:%d, month:%d, day:%d\n", (year - 1), month, (i - date_map(month, -1)));

}

return 0;

}

int date_map(int month, int sum_t)

{

switch(month)

{

case 1: sum_t = 0; break;

case 2: sum_t = 31; break;

case 3: sum_t = 59; break;

case 4: sum_t = 90; break;

case 5: sum_t = 120; break;

case 6: sum_t = 151; break;

case 7: sum_t = 181; break;

case 8: sum_t = 212; break;

case 9: sum_t = 243; break;

case 10: sum_t = 273; break;

case 11: sum_t = 304; break;

case 12: sum_t = 334; break;

default: break;

}

if (month != -1) return sum_t;

if (month == -1)

{

do{

switch(sum_t)

{

case 0: month = 1; break;

case 31: month = 2; break;

case 59: month = 3; break;

case 90: month = 4; break;

case 120: month = 5; break;

case 151: month = 6; break;

case 181: month = 7; break;

case 212: month = 8; break;

case 243: month = 9; break;

case 273: month = 10; break;

case 304: month = 11; break;

case 334: month = 12; break;

default: break;

}

if (month != -1) break;

}while(sum_t--);

}

if (sum_t != -1) return month;

}

运行结果

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 5 21 6

The before of 6 day is : year:2020, month:5, day:15

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 5 21 141

The before of 141 day is : year:2020, month:1, day:1

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 5 21 142

The before of 142 day is : year:2019, month:12, day:31

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 5 21 325

The before of 325 day is : year:2019, month:7, day:1

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 1 1 8

The before of 8 day is : year:2019, month:12, day:24

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 1 8 8

The before of 8 day is : year:2019, month:12, day:31

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 1 1 365

The before of 365 day is : year:2019, month:1, day:1

necasroot@necasroot:~/code/tmp$ vim year.c

necasroot@necasroot:~/code/tmp$ ./year

Please input year month day days : 2020 2 29 365

The before of 365 day is : year:2019, month:3, day:1

necasroot@necasroot:~/code/tmp$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值