随笔 - 36  文章 - 0 评论 - 2 阅读 - 41862
< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

群里有人发:

复制代码
public static boolean[] BiAdd(boolean[] A, boolean[] B) {
2 boolean[] mResult = null;
3 int i;
4 boolean mAcc = false;
5 if (A.length != B.length) {
6 return null;
7 }
8 mResult = new boolean[A.length + 1];
9 for (i = mResult.length - 1; i > 0; --i) { //******
10 mResult[i] = B[i - 1] ^ mAcc;
11 if (A[i - 1]) {
12 mResult[i] = !mResult[i];
13 mAcc = B[i - 1] | mAcc;
14 } else {
15 mAcc = B[i - 1] & mAcc;
16 }
17 }
18 mResult[0] = mAcc;
19 return mResult;
20 }
复制代码

是一个二进制的加法运算,他想把for内部的代码简化。

我倒是想了,可惜不知道还有更好,不过让我自己写吧,我就写了下面这样一个:

复制代码
function bi_add($A, $B){
//adjust the length of two binary array
($a_len = count($A)) > ($b_len = count($B)) ? ($B = array_pad($B, -$a_len, 0)) : ($A = array_pad($A, -$b_len, 0));
$C = array_fill(0, count($A) + 1, 0);
for($i = count($C) - 1; $i > 0 ; $i--){
$tmp = 2 - ($C[$i] + $A[$i - 1] + $B[$i - 1]);
if($tmp <= 0){//if has carry
$C[$i - 1] = 1;
}
$C[$i] = abs($tmp) % 2;//get 0 or 1
}
return $C;
}
$A = array(1,1);
$B = array(0,1,0,1);
echo implode("", $A)."<br />";
echo implode("", $B)."<br />";
echo implode("", bi_add($A, $B))."<br />";
复制代码

倒是发到了群里,一个名叫“佳南”人开话了,说“这种没有IQ的代码就别贴出来了”,是啊,弱暴了的代码,那我虚心求教啊,求一个化简代码,结果当然无答。发现这世上高手真是多!多得只会鄙视,不会解答。我当然承认自己非主流的代码,比起什么纯逻辑操作看起来,要“没技术含量”得多,哎,也是感叹

posted on   重生  阅读(345)  评论(0编辑  收藏  举报
编辑推荐:
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
阅读排行:
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用
点击右上角即可分享
微信分享提示