题解 | #日期累加#
日期累加
https://www.nowcoder.com/practice/eebb2983b7bf40408a1360efb33f9e5d
#include<stdio.h>
int run[] = { 31,29,31,30,31,30,31,31,30,31,30,31 };
int norun[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int isRun(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return 1;
else
return 0;
}
void result(int y, int m, int d, int days) {//给定日期,计算从这一天开始,经过days天是几号
if (isRun(y)) {
if (days > 366) {
result(y + 1, 1, 1, days - 366);
}
else {
for (int i = 0;;i++) {
if (days > run[i]) {
days -= run[i];
m++;
}
else {
d = days;
break;
}
}
printf("%04d-%02d-%02d\n", y, m, d);
}
}
else {
if (days > 365) {
result(y + 1, 1, 1, days - 365);
}
else {
for (int i = 0;;i++) {
if (days > norun[i]) {
days -= norun[i];
m++;
}
else {
d = days;
break;
}
}
printf("%04d-%02d-%02d\n", y, m, d);
}
}
}
int main(){
int m;
scanf("%d", &m);
while (m--) {
int y, m, d, days;
scanf("%d %d %d %d", &y, &m, &d, &days);
int sum = 0;
//求出这一年已近过了几天,加到题给天数上
if (isRun(y)) {
for (int i = 0;i < m - 1;i++) {
sum += run[i];
}
sum += d;
}
else {
for (int i = 0;i < m - 1;i++) {
sum += norun[i];
}
sum += d;
}
sum += days;
result(y, 1, 1, sum);
}
}


深信服公司福利 925人发布