1、整数转二进制数

//将一个int型整数转换为二进制数
string itob(int number)
{string binNum;while (number){binNum += '0' + number%2;number /= 2;}reverse(binNum.begin(), binNum.end());return binNum;
}

如果需要二进制数高位补零,或者是正负数转换的二进制数有符号位,则可以对以上代码稍作处理。

2、二进制数转整数

//方法一:将一个二进制数转换为int型整数(不考虑有符号位的情况)
int btoi(string binNum)
{int ret = 0;for (auto x : binNum)ret = ret * 2 + (x - '0');return ret;
}

当然你也可以从二进制的低位开始算起(就像教科书里将一个二进制数化为整数那样),如下

//方法二:将一个二进制数转换为int型整数(不考虑有符号位的情况)
int btoi(string binNum)
{int ret = 0;for (int i = binNum.size() - 1; i >= 0; i--)ret += (binNum[i] - '0') * pow(2, binNum.size() - i - 1);return ret;
}

两种方法都可以实现目的,但是在对二进制求模的时候会稍有区别,继续往下面看。

3、二进制求模

现在有个问题:有两个二进制字符串binStr1、binStr2,要求你用binStr1对binStr2求模,结果还是用二进制字符串形式返回,你会怎么做?

当然,最容易想到的也最简单的方式,就是利用我们上面写的btoi和itob函数,现将这两个二进制字符串转换为整数,然后整数用%求余,结果再用itob函数转换为二进制字符串返回,完美!

那你真的是很聪明了!我现在加大难度,假如说binStr1这个二进制串非常非常长,表示的整数远远超过了int甚至是long long类型所能表示的范围;也就是说这个整数计算机它存储不了!(当然binStr2表示的范围没有那么变态,因为对binStr2求模的结果可能需要用计算机表示出来)。那这个时候我还让你求出这个模的结果(求模的结果用二进制串或者整数类型表示都可以),你会怎么办?

我们先来看一下二进制求模的时候是什么样子的吧。假如我们需要求10011110(158) 对1010(10)的模:

余数1000(8)即所求的结果。

其实我们演示的这个二进制除法过程跟十进制除法是一样的。当然我们受此启发,如果按照这个过程对binStr1和binStr2进行处理,求他们模的结果,应该说也不是不可以,只是这样会特别麻烦。

如果我们对这个过程继续深入探究的话,我们将会发现一些端倪!!

看除法的过程是怎么做的??对于被除数二进制串,不停的往后走,直到找到一个大于等于除数二进制串的数,第一次找到的是10011,对除数1010作除法得到余数1001,然后拿到被除数的下一位组成10011,继续对除数1010作除法,得到余数1001,然后继续往下面进行..........

如果我们不用处理二进制字符串的方法进行求余数,而是在这个过程中用整数求余的方式进行,不是也完美避免了因为二进制数过大而导致的计算机不能表示带来的死结嘛?

直接上代码,给出一个直观的理解:求一个二进制串表示的大整数对另一个整数求模的结果,结果用十进制整数返回

/**function:求一个二进制串表示的大整数对另一个整数求模的结果,结果用十进制整数返回假设:二进制串表示的大整数是bigBinNum,对mod求模。**/
#define MOD mod
int binaryMod(string bigBinNum)
{int ret = 0;for (auto x : bigBinNum)ret = (ret * 2 + x - '0') % MOD;return ret;
}

这里的代码流程跟上面二进制转整数方法一里面的方法是一样的,只是稍稍多加了一个求模的功能。

在刷LeetCode的时候遇到这个小问题(求一个二进制串表示的大整数对另一个整数求模的结果,结果用十进制整数返回),在此稍作总结,以便以后可以随时复习查看。

二进制数转整数、整数转二进制数、二进制数求模相关推荐

  1. 如何打印int整数的32位二进制数(位运算)

     位运算符: <<左移 >>右移 >>>无符号右移 & 与运算 :两位全为1,结果为1,否则为0  | 或运算:两位只要有一个为1,结果为1,否则为0 ...

  2. AMNO.6 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123 输入 一个不大于5位的数字

    题目描述 给出一个不多于5位的整数,要求 1.求出它是几位数 2.分别输出每一位数字 3.按逆序输出各位数字,例如原数为321,应输出123 输入 一个不大于5位的数字 输出 三行 第一行 位数 第二 ...

  3. Algorithm:C++语言实现之分治法相关问题(给定实数x和整数n,分治法求xn)

    Algorithm:C++语言实现之分治法相关问题(给定实数x和整数n,分治法求xn) 目录 分治法 1.给定实数x和整数n,分治法求xn 分治法 1.给定实数x和整数n,分治法求xn

  4. 给出一个不多于5位的整数,要求 1、求出它是几位数 2、分别输出每一位数字 3、按逆序输出各位数字,例如原数为321,应输出123。

    撰写人--软工二班--陈喜平 题目描述 给出一个不多于5位的整数,要求 1.求出它是几位数 2.分别输出每一位数字 3.按逆序输出各位数字,例如原数为321,应输出123. 将下面的程序填写完整. # ...

  5. 用Java语言定义一个整数定义的数组,求奇数个数和偶数个数。

    ##[Java] 定义一个整数定义的数组,求奇数个数和偶数个数. /*作者:龙蝶 *日期:2020年4月4日 */public clsss Array{public static void main( ...

  6. python分段函数输入x的值求y的值_C语言编程题 有一分段函数如下,要求用scanf函数输入整数x的值,求y值并在屏幕上输出。有分段函数如下,编程实现输入整...

    C语言编程题 有一分段函数如下,要求用scanf函数输入整数x的值,求y值并在屏幕上输出. 有分段函数如下,编程实现输入整 www.zhiqu.org 时间: 2020-11-22 #include ...

  7. 快速幂算法和大整数求模

    ** 1.快速幂的算法** (1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了 ...

  8. 蓝桥杯真题 求和 给定 n 个整数 a1· a2, · · · , an,求它们两两相乘再相加的和

    求和 问题描述 给定 n 个整数 a1, a2, · · · , an ,求它们两两相乘再相加的和,即: S=a1·a2+a1·a3+···+a1·an+a2·a3+···+an-2·an+an-1· ...

  9. 谭浩强C++课后习题13——整数转化为字符串,求i平方和

    谭浩强C++课后习题13--整数转化为字符串,求i平方和 题目一:用递归法将一个整数n转化为字符串.例如,输入483,应输出字符串"483".n的位数不确定,可以是任意位数的整数. ...

  10. PHP典型案例计算1-10的阶乘的和,PHP输入两个整数m和n,求最大公约数和最小公倍数这两个代码

    目录 一.前言 二.代码段 1.计算1-10的阶乘的和的代码段 2.输入两个整数m和n,求最大公约数和最小公倍数的代码段 三.实现结果(流程) 1.计算1-10的阶乘的和的代码段的显示结果 2.输入两 ...

最新文章

  1. 阅读Book: MultiObjective using Evolutionary Algorithms (4) --- 3 种方法find Non-dominated set
  2. [转载] 唐浩民评点曾国藩家书(上)——一个不同凡庸的乡村农民
  3. java地址传递_关于java中是地址传递还是值传递的测试
  4. ls/vi等 command not found
  5. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - SSE扩展(11) - 数据可缓存性控制指令
  6. python_83_random_应用验证码
  7. PHP报错:Malformed UTF-8 characters, possibly incorrectly encoded
  8. 如何解决mac上不了网的问题
  9. Linux | 文件系统 | Ext2fs
  10. 数据结构 —— 队列
  11. ★关于人类体质弱化的分析
  12. 两个鸡蛋--一道Google面试题
  13. Python分析一下双色球,中大奖指日可待
  14. HUAWEI nova 青春版发布会现场探秘 堪称圈内大惊喜
  15. long term recurrent convolutional networks for visual recognition and description
  16. JAVAEE 实训日志01_20200704 上
  17. LocalDate获取一年的周数,及指定周数周一到周日对应得日期
  18. ChatGPT 大智近妖,从宇宙人生到手搓光刻机,从哄女友到写年终总结我们聊得非常开心,反而让人越来越忧心
  19. Sqlite3安装使用(基于Windows 10)
  20. NMS(non maximum suppression )

热门文章

  1. 【论文翻译】预测多关系和异构网络中的链接
  2. 帝国cms html广告,帝国cms加入JS广告代码不显示的解决办法
  3. LiveZilla 详细 配置 设置 (二) 安装 LiveZilla
  4. java 及时释放内存_Java里可以自动释放的不只是内存,只要是“资源”,都可以自动释放!轻松加愉快!...
  5. 四川2021年高考成绩位次查询,2021年填报志愿数据:四川所有本科大学近三年分数线、对应位次排行榜...
  6. html+css+js制作520表白网页,全屏的爱心和表白语网页动画代码,浪漫的520爱心表白动画特效。...
  7. NGINX配置ftp目录
  8. Metro Studio——轻松创建Metro风格图标
  9. 机器学习学习整理(二)对数几率回归与支持向量机
  10. 斯蒂文斯理工学院计算机排名,2020年斯蒂文斯理工学院QS世界排名