这是一道 i f − e l s e if-else if−else语句的基础题目,由于数据量很大达到了 1 0 1 0 5 10^{10^{5}} 10105,换成 10 10 10进制会有 1 0 5 10^{5} 105位,而我们现阶段的数据类型最多也只能存下几十位大的数,所以这题我们得用别的方法存下来,而什么数据类型能存下 1 0 5 10^5 105的数据呢,显然是字符串类型(String),那么我们就可以使用 s 1 , s 2 s_1,s_2 s1,s2存下 a 1 , a 2 a_1,a_2 a1,a2,
我们发现
a
1
a_1
a1是多少并不重要,我们只关系其奇偶性,那么我们只需要判断其最后一位的奇偶性即可,那么我们可以使用字符串的函数
s
1
.
b
a
c
k
(
)
s_1.back()
s1.back()来获取
s
1
s_1
s1的最后一个位置上的字符,但是我们此时取出来的只是一个字符,并不是一个数,对于一个在’
0
0
0‘
−
-
−
9
9
9’之间的字符
c
c
c,我们使用
c
c
c-'
0
0
0’即可获取到其对应的数值,最后再根据
a
2
a_2
a2把
a
2
a_2
a2分成三种情况讨论即可。
不懂的可以看代码注释:
inline void solve(){
string s1,s2;//使用字符串读入a1,a2
cin>>s1>>s2;
int a=s1.back()-'0';//获取a1最后一位
if(s2[0]=='5'){
int f=1;//标记后面是否全是0
for(int i=1;i<s2.length();i++){//判断后面是否全是0
if(s2[i]!='0'){
f=0;
break;
}
}
if(f){//后面全是0,那么当前a2=5
if(a%2){//当a1为奇数时进位所以多了
cout<<"Happy birthday to MFGG"<<endl;
}
else{//当a1为偶数时去掉小数部分所以少了
cout<<"Happy birthday to YXGG"<<endl;
}
}
else{//后面不全是0,那么当前a2>5,因此会进位,所以多了
cout<<"Happy birthday to MFGG"<<endl;
}
}
else if(s2[0]>'5'){//a2>5,因此会进位,所以多了
cout<<"Happy birthday to MFGG"<<endl;
}
else if(s2[0]=='0'){//因为不含有前导0,所以a2=0,此时不进不舍,所以不变
cout<<"PLMM"<<endl;
}
else{//0
cout<<"Happy birthday to YXGG"<<endl;
}
}