二进制模5的DFA

 1 /*
 2         已知语言L={x|x∈{0,1}*}且当把x看成二进制时,x模5与0同余,要求当x为0时,
 3     |x|=1,且x!=0时,x的首字符为1。画出该语言的DFA状态图。
 4     s为初始状态,a~e分别代表余0~4,z表示第一个输入为0,t表示0之后还有输入
 5     num=5N+k
 6     num=2(5N+k)+k1
 7 */
 8 #include<stdio.h>
 9 #include<string.h>
10 int main(){
11     char num[1000],k;
12     int i;
13     k='s';
14     gets(num);
15     for( i=0; i < strlen(num); i++){
16         if(num[i] == '0' || num[i] == '1')
17         switch(k){
18         case 's': if(num[i] == '1')
19                     k='b';
20                 else if(num[i] == '0')
21                     k='z';
22                 break;
23         case 'b': if(num[i] == '0')
24                     k='c';
25                 else if(num[i] == '1')
26                     k='d';
27                 break;
28         case 'c': if(num[i] == '0')
29                     k='e';
30                 else if(num[i] == '1')
31                     k='a';
32                 break;
33         case 'd': if(num[i] == '0')
34                     k='b';
35                 else if(num[i] == '1')
36                     k='c';
37                 break;
38         case 'e': if(num[i] == '0')
39                     k='d';
40                 else if(num[i] == '1')
41                     k='e';
42                 break;
43         case 'a': if(num[i] == '0')
44                     k='a';
45                 else if(num[i] == '1')
46                     k='b';
47                 break;
48         case 'z': k='t';
49                 break;
50         case 't': k='t';
51                 break;
52         default :printf("1111111\n");
53         }
54         else{
55             k='s';
56             break;
57         }
58     }
59         switch(k){
60         case 'a': printf("num能被5整除,余数为:0\n");break;
61         case 'b': printf("num不能被5整除,余数为:1\n");break;
62         case 'c': printf("num不能被5整除,余数为:2\n");break;
63         case 'd': printf("num不能被5整除,余数为:3\n");break;
64         case 'e': printf("num不能被5整除,余数为:4\n");break;
65         case 'z': printf("num为0\n");break;
66         case 't': printf("输入有误不符合:x=0时,|x|=1\n");break;
67         default : printf("输入不符合规定\n");
68         }
69     return 0;
70 }

 

转载于:https://www.cnblogs.com/lpa1027/p/6618440.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值