C语言:二进制模5
输入一串字符,若是二进制则求其模五的值。
要求:1、若输入的字符包含除0、1以外的值,则输出:invalid
2、若输入的为二进制字符串,则输出所计算的其模五的值
3、若其输入字符均为0、1,但是第一个输入的字符为0则输出:irregular
思路:可以参照所学的形式语言与自动机理论里面的自动机思想来做题:通过对输入的字符进行一个个的判断,从而输出所求的值,根据相应的状态再进行输出。
根据题意可以判断出非0、1外的输入都是invalid,所以可以根据这个特点设定它的开始状态state=invalid,后面根据输入字符判断,建议在做题目前可以先画自动机状态图,这样有助于理清思路,避免写的时候出现思绪混乱。另外值得注意的是输入的字符串可能一开始是0、1组成,后面就是其他字符再加0、1组成的字符串的情况,这个时候是invalid状态,若像我这样写的就一定要注意跳到break了,不然会导致判断错误,所以一定要注意到这个情况。
这个题也可以用if...else if...else...等语句嵌套,也可以不用宏定义每个状态值,直接用1、2、3、4.。。。等等数字作为状态,只要语法无错误都可。
#include<stdio.h>
#define x0 0
#define x1 1
#define x2 2
#define x3 3
#define x4 4
#define x5 5
#define invalid 6
#define irregular 7
int FA(int state,char input);
int main()
{
char a[];
int state,i=;
gets(a);
state=invalid;
while(a[i]!='\0')
{
state = FA(state,a[i]);
i++;
if (state==invalid)
break;
}
if (state==x0 || state==)
printf("0\n");
else if (state==x1)
printf("1\n");
else if (state==x2)
printf("2\n");
else if (state==x3)
printf("3\n");
else if (state==x4)
printf("4\n");
else if (state==)
printf("invalid\n");
else if (state== )
printf("irregular\n");
return ;
}
int FA(int state, char input)
{
switch(state)
{
case invalid:
if(input == '') state=x1;
else if(input == '') state=x5;
else state=invalid;
break;
case x0:
if(input == '') state=x1;
else if(input == '') state=x0;
break;
case x1:
if(input == '') state=x3;
else if(input == '') state=x2;
else state=invalid;
break;
case x2:
if(input == '') state=x0;
else if(input == '') state=x4;
else state=invalid;
break;
case x3:
if(input == '') state=x2;
else if(input == '') state=x1;
else state=invalid;
break;
case x4:
if(input == '') state=x4;
else if(input == '') state=x3;
else state=invalid;
break;
case x5:
if(input == '' || input == '') state=irregular;
else state=invalid;
break;
case irregular:
if(input == '' || input == '') state=irregular;
else state=invalid;
break;
}
return state;
}
C语言:二进制模5的更多相关文章
- CAD从二进流加载数据(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::ReadBinStreamEx 从二进流加载数据,详细说明如下: 参数 说明 IMxDrawBinStream* pBinStream ...
- CAD把当前图上数据保存为一个二进流对象(com接口VB语言)
主要用到函数说明: MxDrawXCustomFunction::WriteBinStreamEx 把当前图上数据保存为一个二进流对象,详细说明如下: 参数 说明 LPCTSTR pszPasswor ...
- 【Java】 剑指offer(14) 二进制中1的个数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把 ...
- java语言基础-进制
一丶Java语言基础:进制 1.进制的四种表现形式 (1).二进制:0,1 满2进1. (2).八进制0-7 :满8进1,用0开头表示. (3).十进制:0-9 满10进1. (4).十六进制:0-9 ...
- 统计无符号整数二进制中1的个数(Hamming weight)
1.问题来源 之所以来记录这个问题的解法,是因为在在线编程中经常遇到,比如编程之美和京东的校招笔试以及很多其他公司都累此不疲的出这个考题.看似简单的问题,背后却隐藏着很多精妙的解法.查找网上资料,才知 ...
- [LeetCode] Binary Watch 二进制表
A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom ...
- 剑指Offer面试题:9.二进制中1的个数
一.题目:二进制中1的个数 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如把9表示成二进制是1001,有2位是1.因此如果输入9,该函数输出2. 二.可能引起死循环的解法 一个 ...
- c语言二维数组传递
c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维 ...
- 剑指Offer:二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数. // 二进制中1的个数 #include <stdio.h> int wrong_count_1_bits(int n) // 错误解法 ...
随机推荐
- javascript基础 之 json
1,json是用于存储和传输的数据格式 全称:JSON 英文全称 JavaScript Object Notation json转化为javascript的规则: 数据为 键/值 对. 数据由逗号分隔 ...
- 编程入门视频【 Python、PHP、ThinkPHP、Laravel、Mysql、微信小程序】
免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程序等学习视频 点击进入搜刮 免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程 ...
- [加密解密]CryptoAPI简介
CryptoAPI概述 Windows CryptoAPI是Microsoft 公司提出的安全加密应用服务框架,也是PKI推荐使用的加密 API.它提供了在Win32 环境下使用认证.编码.加密和签名 ...
- OpenCV中Mat总结
一.数字图像存储概述 数字图像存储时,我们存储的是图像每个像素点的数值,对应的是一个数字矩阵. 二.Mat的存储 1.OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘 ...
- 出错:Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'cn.mgy.mapper.UserMapper.findById'.
详细出错代码: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.a ...
- JDK 8 函数式编程入门
目录 1. 概述 1.1 函数式编程简介 1.2 Lambda 表达式简介 2. Lambda 表达式 2.1 Lambda 表达式的形式 2.2 闭包 2.3 函数接口 3. 集合处理 3.1 St ...
- 查看CentOS版本信息
今天小编将给大家详细讲解查看CentOS版本信息的命令. (一) 查看已经安装的CentOS版本信息 1.cat /etc/issue 查看版本 cat 缩写concatenate cat命令可以 ...
- 99%的Linux运维工程师必须要掌握的命令及运用
本为同步于微信公众号[IT行业技术圈]关注即可查看更多相关知识点~ Linux对于程序员来并不陌生,随着图形化界面的深入人心,渐渐地命令行开始淡出了我们的视野,随着时间的推移也变得生疏且陌生起来.在此 ...
- Voronoi图和Delaunay三角剖分
刷题的时候发现了这么一个新的东西:Voronoi图和Delaunay三角剖分 发现这个东西可以$O(nlogn)$解决平面图最小生成树问题感觉非常棒 然后就去学了.. 看的n+e的blog,感谢n+e ...
- 关于ajax 返回值验证问题
如果后台返回布尔值true时 前端 if(data==true){ //true 不能加引号 否则就变成了字符串了 alert(data+'操作成功!'+status); }