手撕代码:判断二进制串除以3的余数

题目描述:

给定一个长二进制串,求其除以3的余数

思路分析:

这里涉及到状态机,由于除以三的余数只可能是0,1,2。所以状态机就有三个状态。现在逐个遍历二进制串,初始余数为0,当遇到1时,状态转到1,遇到0时状态仍为0。对于状态1,判断分别遇到0和1的状态变换:遇到0,即余数为2转到状态2;遇到1,即余数为0转到状态0。可以发现,对于每个数在其后添加0相当于乘2,加1相当于乘2加1。

代码:

 1 int numRest(string s)
 2 {
 3     int n = s.length();
 4     int res=0;
 5     for(int i=0; i<n; i++)
 6     {
 7         if(res==0)
 8         {
 9             if(s[i]==‘0‘)
10                 res=0;
11             else
12                 res=1;
13         }
14         else if(res==1)
15         {
16             if(s[i]==‘0‘)
17                 res = 2;
18             else
19                 res=0;
20         }
21         else
22         {
23             if(s[i]==‘0‘)
24                 res=1;
25             else
26                 res=2;
27         }
28     }
29     return res;
30 }

原文地址:https://www.cnblogs.com/LJ-LJ/p/11610433.html

时间: 2024-07-31 04:17:18

手撕代码:判断二进制串除以3的余数的相关文章

【面试必备】手撕代码,你怕不怕?

Part 1.生产者-消费者问题这绝对是属于重点了,不管是考察对于该重要模型的理解还是考察代码能力,这都是一道很好的考题,所以很有必要的,我们先来回顾一下什么是生产者-消费者问题: 问题简单回顾 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家. 生产者消费者问题(英语:Producer-consumer pr

java面试之手撕代码

在最近的面试中,面试官经常要面试者手撕代码,哎奈何本人只知道原理,一到手撕就死乔乔了. 第一题:宜信一面手撕代码之写代码实现一个栈的的前序遍历: 第一步.要构造节点类 public class Node { private int data; private Node leftChild;//左孩子 private Node rightChild;//右孩子 public Node(int data,Node leftChild,Node rightChild){ this.data = dat

手撕代码之反转单链表

今天去际链面试,结果在coding这一关又折了. 那就总结一下吧,就当再手撕一下代码 首先定义一个listNode: public class listNode { int data; listNode next; public listNode(int data, listNode next) { this.data = data; this.next = next; } } 定义方法: public class listNodeReverse { public static void mai

2019字节跳动面试时手撕代码题(持续更新~)

1. N 阶乘末尾0的个数. 输入描述: 输入为一行,n(1 ≤ n ≤ 1000) 输出描述: 输出一个整数,即题目所求解法:要判断末尾有几个0就是判断可以整除几次10.10的因子有5和2,而在0~9之间5的倍数只有一个,2的倍数相对较多,所以本题也就转换成了求N阶乘中有几个5的倍数.也就是每多出来一个5,阶乘末尾就会多出来一个0,这样n / 5就能统计完第一层5的个数,依次处理,就能统计出来所有5的个数.同一个思想两种写法. 题解: 要判断末尾有几个0就是判断可以整除几次10.10的因子有5

NN入门,手把手教你用Numpy手撕NN(一)

前言 这是一篇包含极少数学推导的NN入门文章 大概从今年4月份起就想着学一学NN,但是无奈平时时间不多,而且空闲时间都拿去做比赛或是看动漫去了,所以一拖再拖,直到这8月份才正式开始NN的学习. 这篇文章主要参考了<深度学习入门:基于Python的理论与实现>一书,感觉这本书很不错,偏向实践,蛮适合入门. 话不多说,下面开始我们的NN入门(手撕NN)之旅 基础数学知识 这里只对张量进行简单介绍,关于矩阵运算之类的,就靠你们自己另外学啦. 标量(0D张量) 仅包含一个数字的张量叫作标量(scala

Unity手游之路&lt;十三&gt;手游代码更新策略探讨

这几个月公司项目非常忙,加上家里事情也多,所以blog更新一直搁置了.最近在项目开发上线过程中遇到了一些新问题,接下来的时间和大家多多探讨学习.大家在工作中遇到技术问题,或者有什么想分享的,欢迎多多探讨 [email protected] ----------------------------------------------------------------------------------------------------------------------------------

ssbc 手撕包菜运行一段时间就停止的原因

原文: ssbc 手撕包菜运行一段时间就停止的原因 ssbc 运行一段时间后,大概半个小时,就莫名奇妙停止不爬了,通过错误提示可以看出,其实是ssbc与mysql(maridb)断开连接了,导致程序异常,当然就插入不了数据了. 所以解决办法很简单,有多种解决办法: 一种是写个脚本,定时重启爬虫.这种方法比较笨,效率低下,因为不知道什么时候爬虫停止了. 另一种是修改下代码,当mysql断开连接时,再次重连mysql就可以拉. 附上方法二修改后的爬虫源码(simdht_worker.py) 附件下载

我要好offer之 str/mem系列手写代码

1. str*系列手写代码 a. 一定要注意末尾'\0'的处理,切记切记 b. 一定要对输入做有效性判断,多用断言就是了 int Strlen(const char* str) { assert(str != NULL); const char* tmp = str; while (*tmp != '\0') { ++tmp; } return tmp - str; } char* Strcpy(char* dst, const char* src) { assert(dst != NULL &

(KMP 1.6)hdu 2203 亲和串(判断文本串循环移位之后是否能将模式串包含在其中)

题目: 亲和串 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9139    Accepted Submission(s): 4174 Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,