比如输入20080301,输出20160229
typedef struct {
int y;
int m;
int d;
}Date;
void pre_date(Date* s, Date* p) {
*p = *s;
if (p->d > 1) {
p->d--;
return;
}
p->m--;
switch (p->m) {
case 0:
p->y--;
p->m = 12;
case 1: case 3: case 5: case 7: case 8: case 10:
p->d = 31;
break;
case 2:
p->d = 28;
if (((p->y % 4 == 0)) && !(p->y %100 == 0 && p->y % 400 != 0))
p->d++;
break;
case 4: case 6: case 9: case 11:
p->d = 30;
break;
}
}
void get_date(char*s , Date* d) {
const char fmt[] = "YYYYMMDD";
const char* m = fmt;
d->y = d->m = d->d = 0;
while (*s) {
int *c;
switch (*m) {
case 'Y': c = &d->y;break;
case 'M': c = &d->m;break;
case 'D': c = &d->d;break;
}
*c = *c * 10 + (*s - '0');
m++;
s++;
}
}
int main() {
char str[512];
Date d1, d2;
gets(str);
get_date(str, &d1);
pre_date(&d1, &d2);
printf("%d-%02d-%02d", d2.y, d2.m, d2.d);
return 0;
}
int y;
int m;
int d;
}Date;
void pre_date(Date* s, Date* p) {
*p = *s;
if (p->d > 1) {
p->d--;
return;
}
p->m--;
switch (p->m) {
case 0:
p->y--;
p->m = 12;
case 1: case 3: case 5: case 7: case 8: case 10:
p->d = 31;
break;
case 2:
p->d = 28;
if (((p->y % 4 == 0)) && !(p->y %100 == 0 && p->y % 400 != 0))
p->d++;
break;
case 4: case 6: case 9: case 11:
p->d = 30;
break;
}
}
void get_date(char*s , Date* d) {
const char fmt[] = "YYYYMMDD";
const char* m = fmt;
d->y = d->m = d->d = 0;
while (*s) {
int *c;
switch (*m) {
case 'Y': c = &d->y;break;
case 'M': c = &d->m;break;
case 'D': c = &d->d;break;
}
*c = *c * 10 + (*s - '0');
m++;
s++;
}
}
int main() {
char str[512];
Date d1, d2;
gets(str);
get_date(str, &d1);
pre_date(&d1, &d2);
printf("%d-%02d-%02d", d2.y, d2.m, d2.d);
return 0;
}
温馨提示:答案为网友推荐,仅供参考