zoukankan      html  css  js  c++  java
  • 算一下从公元纪年开始到现在,总共有多少个回文日

    问题

    今天是2021.12.02,这串数字无论正读还是反读都是一样的,这种日期形式称为“回文日”。
    朋友圈流行着这样一张图片
    mmexport1638413444031
    “千年难遇”?我不信,所以我打算写个代码跑一跑。
    所考虑情况为月和日均为两位数,如2001.1.5记作2001.01.05,年份则不含前缀0.

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int ans;
    int m; //判断月份 
    
    int isleap(int x) //判断是否为闰年 
    {
    	if(x%4==0&&x%100!=0)
    		return 1;
    	if(x%400==0)
    		return 1;
    	else return 0;
    }
    
    string itoc(int x) //将数字转成字符 
    {
    	string s="";
    	while(x)
    	{
    		char q='0'+(x%10-0);
    		s=q+s;
    		x/=10;
    	}
    	return s;
    }
    
    int check(string s) //检查是否为回文字符串 
    {
    	int len=s.size();
    	for(int i=0;i<len/2;i++)
    	{
    		if(s[i]!=s[len-i-1])
    			return 0;
    	}
    	return 1;
    }
    
    int main()
    {
    	for(int i=1;i<=2022;i++)
    		for(int j=1;j<=12;j++)
    		{
    			if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) // 每月31天的月份 
    				m=31;
    			if(j==4||j==6||j==9||j==11) //每月30天的月份 
    				m=30;
    			if(j==2) //2月需判别是否为闰年 
    			{
    				if(isleap(i)) 
    					m=29;
    				else m=28;
    			}
    			for(int k=1;k<=m;k++)
    			{
    				string s="";
    				s+=itoc(i)+itoc(j)+itoc(k); //将日期转换成字符串 
    				if(check(s))
    				{
    					cout<<i<<'.'<<j<<'.'<<k<<endl;
    					ans++;
    				}
    			}
    		}
    	cout<<ans<<endl;
    	return 0;
    }
    

    结果

    代码跑出来的结果是这样:

    也就是说从公元纪年开始到今天(2021.12.02)总共有513个回文日,看来并不是千年难遇。
    为了使结果更严谨也更具说服力,我决定跑一下从1021.12.02年到今天,也就是最近一千年有多少个回文日
    结果如下:

    结果是43,1000/43=23,也就是平均每至少24年就有一个回文日,并不是“千年难遇”

  • 相关阅读:
    build.gradle 详解(一)
    Android-SDK下目录结构
    eclipse中更新android SDK的方法(在线更新)
    mysql5.7安装
    DispatcherServlet 和 ContextLoaderListener 的关系,到底用哪个?
    IntelliJ IDEA WEB项目的部署配置
    IDEA 配置 tomcat的数据源
    magento后台使用POST表单时,要使用必要参数form_key才能正常通讯
    Atom安装以及activate-power-mode atom package插件安装
    linux下php-mysql拓展安装
  • 原文地址:https://www.cnblogs.com/longwind7/p/15635032.html
Copyright © 2011-2022 走看看