zoukankan      html  css  js  c++  java
  • 示例:日期运算

    (defconstant month
                        #(0 31 59 90 120 151 181 212 243 273 304 334 365))

    (defconstant yzero 2000)

    (defun leap? (y)
        (and (zerop (mod y 4))
            (or (zerop (mod y 400))
                (not (zerop (mod y 100))))))

    (defun date->num (d m y)
           (+ (- d 1) (month-num m y) (year-num y)))

    (defun month-num (m y)
           (+ (svref month (- m 1))
              (if (and (> m 2) (leap? y)) 1 0)))

    (defun year-num (y)
           (let ((d 0))
             (if (>= y yzero)
             (dotimes (i (- y yzero) d)
               (incf d (year-days (+ yzero i))))
             (dotimes (i (- yzero y) (- d))
               (incf d (year-days (+ y i)))))))

    (defun year-days (y)
        (if (leap? y) 366 365))

    (defun num->date (n)
           (multiple-value-bind (y left) (num-year n)
             (multiple-value-bind (m d) (num-month left y)
               (values d m y))))

    (defun num-year (n)
           (if (< n 0)
               (do* ((y (- yzero 1) (- y 1))
                 (d (- (year-days y)) (- d (year-days y))))
                ((<= d n) (values y (- n d))))
               (do* ((y yzero (+ y 1))
                 (prev 0 d)
                 (d (year-days y) (+ d (year-days y))))
                ((> d n) (values y (- n prev))))))

    (defun num-month (n y)
           (if (leap? y)
               (cond ((= n 59) (values 2 29))
                 ((> n 59) (nmon (- n 1)))
                 (t (nmon n)))
               (nmon n)))

    (defun nmon (n)
           (let ((m (position n month :test #' <)))
             (values m (+ 1 (- n (svref month (- m 1)))))))

    (defun date+ (d m y n)
           (num->date (+ (date->num d m y) n)))

  • 相关阅读:
    [HNOI2002]营业额统计
    HDU 1374
    HDU 3345
    HDU 2089
    Graham扫描法
    Codeforces 1144D Deduction Queries 并查集
    Codeforces 916E Jamie and Tree 线段树
    Codeforces 1167F Scalar Queries 树状数组
    Codeforces 1167E Range Deleting
    Codeforces 749E Inversions After Shuffle 树状数组 + 数学期望
  • 原文地址:https://www.cnblogs.com/flowjacky/p/2824851.html
Copyright © 2011-2022 走看看