回文日--char3

        很有趣的一个题目:2011年11月02日是一个回文日:2011 1102,请列出近80年和近60年还有多少个回文日(假如我们能活到百岁,你和我的……)。注意:一年只有12个月。
        问题分析:在近80年中,年份确定后,将其从最低位开始倒着取出,每两位组成一个单位,分别对应月份和日期部分。分别判断这些月份和日期的取值范围是否合乎要求,如果符合则输出……

#include <iostream>   
using namespace std;  
int main( )  
{  
    int year,month,day,y,ymd;  
    bool is_cycle;  
    int count=0;  
    for(year = 2012; year < 2092; year++)  
    {  
        y = year;  //思考:后面直接用year不行吗?   
        month=y%100; //后两位对应月   
        day=y/100; //前两位对应日   
        month=(month%10)*10+month/10;//还得把月倒过来,例year=2012时,month由12换为21   
        day=(day%10)*10+day/10;//对日做同样的处理   
        is_cycle =false;  
        switch(month) //12个月份,各自对应合法的日期范围   
        {  
        case 1:  
        case 3:  
        case 5:  
        case 7:  
        case 8:  
        case 10:  
        case 12:   
            if(day<=31)   
                is_cycle =true;   
            break;  
        case 4:  
        case 6:  
        case 9:  
        case 11:  
            if(day<=30) is_cycle=true;   
            break;  
        case 2:   
            if((year%4==0&&year%100!=0)||year%400==0) //闰年   
            {  
                if(day<=29)   
                    is_cycle =true;  
            }  
            else  
            {  
                if(day<=28)   
                    is_cycle =true;  
            }  
            break;  
        default: continue; //后两位倒过来根本构不成月份   
        }  
        if(is_cycle) //能构成回文日   
        {  
            y=year;  
            ymd=year;   //构造出年月日的形式供输出   
            while(y>0)  
            {  
                ymd=ymd*10+y%10;  
                y=y/10;  
            }  
            cout<<ymd<<endl;  
            count++;  
        }  
    }  
    cout<<"共有 "<< count <<"个回文日。"<<endl;  
    return 0;  
}  

运行结果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值