POJ3332 Parsing Real Numbers DFA

来源:互联网 发布:ag软件下载 编辑:程序博客网 时间:2024/06/06 11:04

这题本来可能一次性就AC掉的,可惜第二个减号忘打进去了,自己又测各种数据,就是没测减号的数据。Orz。。

#include<stdio.h>#include<string.h>char c[1000],s[1000],len,state;void init(){int i,j,tot=0;for(i=0;i<strlen(c);i++)if(c[i]!=' ')break;for(j=strlen(c)-1;j>=0;j--)if(c[j]!=' ')break;while(i<=j)s[tot++]=c[i++];len=tot;}bool dig(int i){if(s[i]>='0'&&s[i]<='9')return true;else return false;}bool judge(int i){if(state==0){if(s[i]=='+'||s[i]=='-')state=1;else if(dig(i))state=2;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==1){if(dig(i))state=2;else return false;}else if(state==2){if(s[i]=='.')state=3;else if(s[i]=='e'||s[i]=='E')state=5;else if(dig(i))state=2;else return false;}else if(state==3){if(dig(i))state=4;else return false;}else if(state==4){if(dig(i))state=4;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==5){if(s[i]=='+'||s[i]=='-')state=6;else if(dig(i))state=7;else return false;}else if(state==6){if(dig(i))state=7;else return false;}else if(state==7){if(dig(i))state=7;else return false;}return true;}void solve(){state=0;init();for(int i=0;i<len;i++){if(!judge(i)){printf("ILLEGAL\n");return;}}if(state==1||state==3||state==5||state==6)printf("ILLEGAL\n");else printf("LEGAL\n");}int main(){int T;scanf("%d",&T);getchar();while(T--){gets(c);solve();}return 0;}

下面附带把COJ的Parsing Real Numbers给贴出来,有点小不一样。

这道题要注意只要小数点左右只要一边有数即可,且需要coefficient

#include<stdio.h>#include<string.h>char s[1000],len,state;bool dig(int i){if(s[i]>='0'&&s[i]<='9')return true;else return false;}bool judge(int i){if(state==0){if(s[i]=='+'||s[i]=='-')state=1;else if(dig(i))state=2;else if(s[i]=='.')state=8;else return false;}else if(state==1){if(dig(i))state=2;else if(s[i]=='.')state=8;else return false;}else if(state==2){if(s[i]=='.')state=3;else if(s[i]=='e'||s[i]=='E')state=5;else if(dig(i))state=2;else return false;}else if(state==3){if(dig(i))state=4;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==4){if(dig(i))state=4;else if(s[i]=='e'||s[i]=='E')state=5;else return false;}else if(state==5){if(s[i]=='+'||s[i]=='-')state=6;else if(dig(i))state=7;else return false;}else if(state==6){if(dig(i))state=7;else return false;}else if(state==7){if(dig(i))state=7;else return false;}else if(state==8)if(dig(i))state=4;else return false;return true;}void solve(){state=0;for(int i=0;i<len;i++){if(!judge(i)){printf("NO\n");return;}}if(state==1||state==5||state==6||state==8)printf("NO\n");else printf("YES\n");}int main(){freopen("t.txt","r",stdin);int T;scanf("%d",&T);getchar();while(T--){gets(s);len=strlen(s);solve();}return 0;}


0 0
原创粉丝点击