进制-Adding Two Negabinary Numbers
2024-10-08 23:16:56
2020-02-20 14:52:41
问题描述:
问题求解:
最开始的想法是将两个数字先转化成自然数在求和,最后转化回去,但是实际上这种方案是不可取的,主要的问题就是会爆掉。
那么就得按位进行运算了。
进行位运算的时候最大的难点在于进位怎么获得。
显然,当sum = 0 / 1的时候,carry = 0;
当sum > 1的时候,carry = -1;
当sum < 0的时候,carry = 1;
sum = 0 -> carry = 0, result = 0
sum = 1 -> carry = 0, result = 1
sum = 2 -> carry = -1, result = 0
sum = 3 -> carry = -1, result = 1
sum = -1 -> carry = 1, result = 1
public int[] addNegabinary(int[] arr1, int[] arr2) {
List<Integer> res = new ArrayList<>();
int len1 = arr1.length;
int len2 = arr2.length;
int carry = 0;
for (int i = 0; i < Math.max(len1, len2) || carry != 0; i++) {
int d1 = i < len1 ? arr1[len1 - 1 - i] : 0;
int d2 = i < len2 ? arr2[len2 - 1 - i] : 0;
int sum = d1 + d2 + carry;
res.add(Math.abs(sum) % 2);
if (sum > 1) carry = -1;
else if (sum < 0) carry = 1;
else carry = 0;
}
int idx = res.size() - 1;
while (idx >= 1) {
if (res.get(idx) == 0) idx -= 1;
else break;
}
int[] nums = new int[idx + 1];
while (idx >= 0) {
nums[nums.length - 1 - idx] = res.get(idx--);
}
return nums;
}
最新文章
- JDBC数据库1
- js 表单内容使用ajax以json格式混合提交
- winScp 跳板机到服务器
- DW(三):polybase基本理论
- C#- FTP递归下载文件
- java新手笔记8 包
- Longest Palindromic Substring -LeetCode
- 一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC
- AES加密时抛出java.security.InvalidKeyException:&#160;Illegal&#160;key&#160;size&#160;or&#160;def
- wcf ServiceContract
- 04-从零玩转JavaWeb-JVM内存详情分析
- canvas动画3:交互
- Android Studio 错误 Duplicate files copied in APK META-INF/LICENSE.txt解决方案
- Java单例模式之最优解分析【为何说是最优解】
- King 差分约束 判负环
- Visual Studio 2017/2019 企业版 Enterprise 激活码
- android 圆角背景
- MacOS 10.12 Sierra 安全性与隐私没有任何来源选项解决方法
- python之requests urllib3 连接池
- STL算法中函数对象和谓词
热门文章
- uploadifive如何动态传参
- 脚本化处理linux云服务器第二硬盘初始化
- Python3——2019年全国大学生计算二级考试
- .ArrayList是如何实现的,ArrayList和LinkedList的区别?ArrayList如何实现扩容?
- sublime Text3 前端常用插件
- 【Geek议题】当年那些风骚的跨域操作
- [LeetCode] 994. Rotting Oranges 腐烂的橘子
- JZOJ 1775. 合并果子2 (Standard IO)
- JAVA生成EXCEL模板
- flask 密码加密 视频资料