题目传送门 \color{orangered}\text{题目传送门} 题目传送门
题意很清楚,我们直接讲做法。
为了更好的进行判断,我们将 s , l , r s,l,r s,l,r 均定义为 string
类型的。
判断:
-
如果 s s s 的第一位是
0
且 s s s 的长度大于 1 1 1 ,说明 s s s 有前导零,直接输出No
。代码:
if(s[0]=='0'&&s.size()>1) printf("No\n");
-
如果 s s s 的长度小于 l l l 的长度或者大于 r r r 的长度,说明 s s s 肯定不在 l l l 和 r r r 之间。(注意:此时已经判断过有前导零的情况,所以不必担心前导零占位)。
代码:
else if(s.size()<l.size()||s.size()>r.size()) printf("No\n");
-
特殊的情况已经判断完了,现在来判断 s s s 是否大于等于 l l l 且小于等于 r r r。
因为 s , l , r s,l,r s,l,r 都被定义为
string
类型的,所以这里需要手写一个函数,将字符串转换为整形。
这里讲解的方法可以参见作者的文章:浅谈整形与字符串之间的转换(c++)转换代码:
int string_to_int(string s){int n=0;int len=0;for(int i=s.size()-1;i>=0;i--){n+=(s[i]-'0')*pow(10,len);len++;}return n;//返回一个整形类型的数}
判断代码:
else{if(string_to_int(s)>=string_to_int(l)&&string_to_int(s)<=string_to_int(r)) printf("Yes\n");else printf("No\n");}
本题完整代码