20180321 今日算法

2018-03-21 08:24:44 +08:00
 brelian
Given two binary strings, return their sum (also a binary string).

For example,
a = "11"
b = "1"
Return "100".
3933 次点击
所在节点    算法
19 条回复
zagreb
2018-03-21 09:01:09 +08:00
return bin(int(a, 2) + int(b, 2))[2:]
zqqian
2018-03-21 09:19:47 +08:00
小学生算术
brelian
2018-03-21 09:24:17 +08:00
@zqqian 愿闻其详?
mengyaoss77
2018-03-21 09:27:39 +08:00
声明一个足够长的数组,然后按位加放进去。。
hjdtl
2018-03-21 09:29:41 +08:00
(parseInt(a,2)+parseInt(b,2)).toString(2)
zqqian
2018-03-21 09:34:33 +08:00
@brelian 就是最朴素的模拟,从右向左按位加,像小学生算术那样
kaifeii
2018-03-21 09:37:20 +08:00
题目应该是有很长位数的。除了按位加以外有一个位运算做加法的方法,异或后移位
kaifeii
2018-03-21 09:39:28 +08:00
从右向左的模拟不能应对从左到右流式输入,用位运算模拟方式可以
@zqqian
kaifeii
2018-03-21 09:41:21 +08:00
当然我只是举例两个字符串同时确定位数从左向右一起输入的特殊情况,有点钻牛角尖了
zqqian
2018-03-21 09:41:51 +08:00
@kaifeii 可以先存到数组里面然后离线计算
ebony0319
2018-03-21 09:47:38 +08:00
楼上很多都没有考虑字符串是可以无限长,但是 int 是有范围的。
zqqian
2018-03-21 09:50:46 +08:00
@ebony0319 所以要用数组。。。
newtype0092
2018-03-21 09:52:43 +08:00
@ebony0319 大数计算一般是按小学学的竖式的方法计算的吧,开两个数组,从低到高位依次计算,能算多大看内存。
tommyZZM
2018-03-21 09:55:40 +08:00
加减法感觉还好。

请大佬指教一下乘除法怎么弄?
yzyun08
2018-03-21 10:16:06 +08:00
@tommyZZM 乘除法也暴力一位一位算就好了当然 也可以几位压到一个数组下标
luoluoluo
2018-03-21 10:30:00 +08:00
要是真模拟,先 reverse a b ;再相加;结果 reverse
xrlin
2018-03-21 14:10:18 +08:00
按位计算就行了,只要记录下前一位的进位。
siyemiaokube
2018-03-21 23:05:26 +08:00
siyemiaokube
2018-03-21 23:08:36 +08:00
@tommyZZM 百度:高精度

课后练习:高精度模除、高精度进制转换、高精度位运算

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX