Golang实现进制计算两种方法
目录
警告
本文最后更新于 2020-04-02,文中内容可能已过时。
本文将以二进制计算作为例子实现
题目:
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
|
|
示例 2:
|
|
逐位计算
解法一:逐位计算
|
|
位运算
XOR 操作得到两个数字无进位相加的结果。
进位和两个数字与操作结果左移一位对应。
首先计算两个数字的无进位相加结果和进位,然后计算无进位相加结果与进位之和。同理求和问题又可以转换成上一步,直到进位为 0 结束。
计算:
- 把 aa 和 bb 转换成整型数字 xx 和 yy,xx 保存结果,yy 保存进位。
- 当进位不为 0:y != 0:
- 计算当前 xx 和 yy 的无进位相加结果:answer = x^y。
- 计算当前 xx 和 yy 的进位:carry = (x & y) « 1。
- 完成本次循环,更新 x = answer,y = carry。
- 返回 xx 的二进制形式。
位运算
运用支持库 math/big ,里面的大数计算
|
|