1 条题解
-
0
C++ :
#include <cstdio> int mdays[] = {0,31,29,31,30,31,30,31,31,30,31,30,31}; int isLeap(int y){ return (y % 4 == 0 && y % 100 != 0) || y % 400 == 0; } /* 由 8 位回文串 abc d dcba 推回日期:年份 = 前4位,月 = 后2位,日 = 前2位(倒序) */ int main(){ int d1, d2; if(scanf("%d %d", &d1, &d2) != 2) return 0; int y1 = d1 / 10000, y2 = d2 / 10000; int cnt = 0; for(int y = y1; y <= y2; y++){ /* 回文格式:y(4位) + M(2位) + D(2位),其中后4位是前4位的反转 设 y 的四位是 a b c d,则整体为 a b c d d c b a 月份 = d c(十位 d、个位 c),日期 = b a */ int a = y / 1000, b = y / 100 % 10, c = y / 10 % 10, d = y % 10; int mon = d * 10 + c, day = b * 10 + a; if(mon < 1 || mon > 12) continue; int md = mdays[mon]; if(mon == 2 && !isLeap(y)) md = 28; if(day < 1 || day > md) continue; int val = y * 10000 + mon * 100 + day; if(val >= d1 && val <= d2) cnt++; } printf("%d\n", cnt); return 0; }
- 1
信息
- ID
- 2716
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者