加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

每周一道算法题009:找二进制对称的日期

发布时间:2020-12-13 21:32:17 所属栏目:PHP教程 来源:网络整理
导读:题目: 把年月日表示为YYYYMMDD这样的8位整数,然后把这个整数转换成二进制数并且逆序排列,再把得到的二进制数转换成十进制数,求与原日期一致的日期。求得的日期要在上一次东京奥运会(1964年10月10日)到下一次东京奥运会(预定举办日期为2020年7月24日)
题目:

把年月日表示为YYYYMMDD这样的8位整数,然后把这个整数转换成二进制数并且逆序排列,再把得到的二进制数转换成十进制数,求与原日期一致的日期。求得的日期要在上一次东京奥运会(1964年10月10日)到下一次东京奥运会(预定举办日期为2020年7月24日)之间。

思路:

从起始时间开始逐天累加,对每一天进行进制转换并反转,然后比较,如果相同就输出,不同就继续,直至到达结束时间。

解答:

php:

function findDate($begin,$end)
{
    $beginDate = new DateTime($begin);
    $endDate = new DateTime($end);
    while ($beginDate != $endDate) {
        $dateNum = $beginDate->format("Ymd");
        $binStr = decbin($dateNum);
        $revStr = strrev($binStr);
        if ($revStr == $binStr) {
            echo $dateNum . "n";
        }
        $beginDate = $beginDate->add(new DateInterval(‘P1D‘));
    }
}

findDate("1964-10-10","2020-07-24");

输出:

19660713
19660905
19770217
19950617
20020505
20130201

golang:

package main

import (
    "fmt"
    "strconv"
    "time"
)

func main() {
    t1 := time.Date(1964,10,time.Local)
    t2 := time.Date(2020,7,24,time.Local)
    findDate(t1,t2)
}

func findDate(begin,end time.Time) {
    for begin != end {
        // 将日期格式化为字符串
        dateNum := begin.Format("20060102")

        // 字符串转为数字
        dateInt,_ := strconv.Atoi(dateNum)

        // 转为二进制
        dateBin := strconv.FormatInt(int64(dateInt),2)
        revBin := Reverse(dateBin) // 反转二进制字符串
        if revBin == dateBin {
            fmt.Println(dateNum)
        }

        // 日期累加
        dd,_ := time.ParseDuration(fmt.Sprintf("%dh",24))
        begin = begin.Add(dd)
    }
}

// 反转字符串
func Reverse(s string) string {
    runes := []rune(s)
    for from,to := 0,len(runes)-1; from < to; from,to = from+1,to-1 {
        runes[from],runes[to] = runes[to],runes[from]
    }
    return string(runes)
}

输出:

19660713
19660905
19770217
19950617
20020505
20130201

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读