题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴,因为每天日历上都可以看到 2。
如果日历中只显示年月日,请问从公元 1900 年 1 月 1 日到公元 9999 年 12 月 31 日,一共有多少天日历上包含 2。即有多少天中年月日的数位中包含数字 2。
运行限制
最大运行时间:1s
最大运行内存: 128M
所需变量
int ge;//代表输入进来的个位数int shi;//代表输入进来的十位数
int bai;//代表输入进来的百位数
int qian;//代表输入进来的千位数
int wan;//代表输入进来的万位数
int shiwan;//代表输入进来的十万位数
int baiwan;//代表输入进来的百万位数
int qianwan;//代表输入进来的千万位数
int nian;//代表年份
int yue;//代表月份
int ri;//代表日
int test;//用于输入从哪个数开始
int sum;//用于统计有多少个数满足
我们首先把输入进来的数字将其每位都分别抽离出来,使用方法很粗暴,代码如下:
ge = i%10;
shi = (i/10)%10;
bai = (i/100)%10;
qian = (i/1000)%10;
wan = (i/10000)%10;
shiwan = (i/100000)%10;
baiwan = (i/1000000)%10;
qianwan = (i/10000000)%10;
ri = 0;
yue = 0;
nian = 0;
ri = i%100;
得到每一位之后,我们首先需要判断的是,这个数是否满足我们正常的需求,那就是:首先月份不能出现二十几月,只要百位大于1,那我们千位就不能大于2,百位不能为0,然后就是每个月份内,我们日不能超过,诸如31天,30天,还有闰年跟平年的29和28天,均是判断条件,只要不满足我们就直接全部continue,判断下一个!部分代码如下:
if(qian>1||((qian==1)&&(bai>2)))
continue;
if(((qian==0)&&(bai==0)))
continue;
if((((qian==0)&&(bai==1))||((qian==0)&&(bai==3))||((qian==0)&&(bai==5))||((qian==0)&&(bai==7))||((qian==0)&&(bai==8))||((qian==1)&&(bai==0))||((qian==1)&&(bai==2))))
if(ri>31)
continue;
if((((qian==0)&&(bai==4))||((qian==0)&&(bai==6))||((qian==0)&&(bai==9))||((qian==1)&&(bai==1))))
if(ri>30)
continue;
nian = i/10000;
if(((nian%4==0)&&(nian%100!=0))||(nian%400 ==0)){
if((((qian==0)&&(bai==2)))&&(ri>29))
continue;
}
else
{
if((((qian==0)&&(bai==2)))&&(ri>28))
continue;
}
完整代码如下(编译器是dev,语言是C语言):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
// 请在此输入您的代码
int ge,shi,bai,qian,wan,shiwan,baiwan,qianwan,nian,yue,ri;
int test = 19000101,sum = 0;
for(int i=test;i<=99991231;i++){
ge = i%10;
shi = (i/10)%10;
bai = (i/100)%10;
qian = (i/1000)%10;
wan = (i/10000)%10;
shiwan = (i/100000)%10;
baiwan = (i/1000000)%10;
qianwan = (i/10000000)%10;
ri = 0;
yue = 0;
nian = 0;
ri = i%100;
if(qian>1||((qian==1)&&(bai>2)))
continue;
if(((qian==0)&&(bai==0)))
continue;
if((((qian==0)&&(bai==1))||((qian==0)&&(bai==3))||((qian==0)&&(bai==5))||((qian==0)&&(bai==7))||((qian==0)&&(bai==8))||((qian==1)&&(bai==0))||((qian==1)&&(bai==2))))
if(ri>31)
continue;
if((((qian==0)&&(bai==4))||((qian==0)&&(bai==6))||((qian==0)&&(bai==9))||((qian==1)&&(bai==1))))
if(ri>30)
continue;
if(ri == 0){
continue;
}
nian = i/10000;
if(((nian%4==0)&&(nian%100!=0))||(nian%400 ==0)){
if((((qian==0)&&(bai==2)))&&(ri>29))
continue;
}
else
{
if((((qian==0)&&(bai==2)))&&(ri>28))
continue;
}
if((ge == 2)||(shi == 2)||(bai == 2)||(qian == 2)||(wan == 2)||(shiwan == 2)||(baiwan == 2)||(qianwan == 2)){
sum++;
}
}
printf("%d",sum);
return 0;
}