题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴。 他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中包含数字 2?
运行限制
最大运行时间:1s
最大运行内存: 128M
所需变量
int ge;//代表个位上的数int shi;//代表十位上的数
int bai;//代表百位上的数
int qian;//代表千位上的数
int sum = 0;//代表多少个年份,初始化为0
int i;//循环变量
int n = 2020;//终止条件是2020
首先我们判断她到底是几位数,然后才好进行判断每一位是否有2,代码如下:
for(i = 1;i<=2020;i++){
if(i<10){
if(i == 2){
sum++;
}
}else if(i<100){
if(er(i)){
sum++;
}
}else if(i<1000){
if(san(i)){
sum++;
}
}else{
if(si(i)){
sum++;
}
}
}
我们知道它是几位数之后在分别进行判断,首先将每一位都获得,然后进行判断是否是2,如果是2那么我们就返回1,都没有2就返回0!代码如下:
int er(int a){
int ge,shi;
ge = a%10;
shi = a/10;
if(ge == 2 || shi == 2){
return 1;
}
return 0;
}
int san(int a){
int ge,shi,bai;
ge = a%10;
shi = (a/10)%10;
bai = a/100;
if(ge == 2 || shi == 2 ||bai == 2){
return 1;
}
return 0;
}
int si(int a){
int ge,shi,bai,qian;
ge = a%10;
shi = (a/10)%10;
bai = (a/100)%10;
qian = a/1000;
if(ge == 2 || shi == 2 ||bai == 2 || qian == 2){
return 1;
}
return 0;
}
最后进行整合,得到最终代码如下(编译器是dev,语言是C语言):
#include <iostream>
using namespace std;
int er(int a){
int ge,shi;
ge = a%10;
shi = a/10;
if(ge == 2 || shi == 2){
return 1;
}
return 0;
}
int san(int a){
int ge,shi,bai;
ge = a%10;
shi = (a/10)%10;
bai = a/100;
if(ge == 2 || shi == 2 ||bai == 2){
return 1;
}
return 0;
}
int si(int a){
int ge,shi,bai,qian;
ge = a%10;
shi = (a/10)%10;
bai = (a/100)%10;
qian = a/1000;
if(ge == 2 || shi == 2 ||bai == 2 || qian == 2){
return 1;
}
return 0;
}
int main()
{
int sum = 0,i,n = 2020;
for(i = 1;i<=2020;i++){
if(i<10){
if(i == 2){
sum++;
}
}else if(i<100){
if(er(i)){
sum++;
}
}else if(i<1000){
if(san(i)){
sum++;
}
}else{
if(si(i)){
sum++;
}
}
}
cout<<sum<<endl;
return 0;
}