码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5059 Help him

时间:2014-10-14 18:55:49      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   for   sp   数据   on   问题   amp   

题解:先判断第一个是否负号。如果是把第一个符号拿掉之后判断后面的长度是否<=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

标签:style   io   ar   for   sp   数据   on   问题   amp   

原文地址:http://www.cnblogs.com/forever97/p/4024531.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!