首页 > 代码库 > HDU 5059 Help him
HDU 5059 Help him
题解:先判断第一个是否负号。如果是把第一个符号拿掉之后判断后面的长度是否<=12,并且是否数字,然后转化成数字看看是否在[a,b],注意-0这个数据。
如果不是判断长度是否<=12,并且是否数字,然后转化成数字看看是否在[a,b]。
#include <cstdio>#include <cstring>char s[150],ss[150];int A,B;long long a,b;using namespace std;int main(){ while((gets(s)!=NULL)&&(~scanf("%d%d",&B,&A))){ a=A,b=B; gets(ss); int l=strlen(s),flag=1; if(l>11||l==0){puts("NO");continue;} for(int i=1;i<l;i++)if(s[i]<‘0‘||s[i]>‘9‘){puts("NO");flag=0;break;} if(flag){ int flag1=1; long long ans=0; if(l==1){ if(s[0]<‘0‘||s[0]>‘9‘){puts("NO");continue;} int now=s[0]-‘0‘; if(now>=b&&now<=a)puts("YES");else puts("NO"); continue; } if(s[0]==‘-‘)flag1=0; else if(s[0]<‘0‘||s[0]>‘9‘){puts("NO");continue;} if(flag1&&s[0]==‘0‘){puts("NO");continue;} if(!flag1&&s[1]==‘0‘){puts("NO");continue;} if(flag1)for(int i=0;i<l;i++)ans=ans*10LL+s[i]-‘0‘; else{for(int i=1;i<l;i++)ans=ans*10LL+s[i]-‘0‘;ans=-ans;} if(ans>=b&&ans<=a)puts("YES");else puts("NO"); } }return 0;}//注意单个的符号和0,还有计算中超过了int的问题
HDU 5059 Help him
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。