首页 > 其他分享 >计算机——基数

计算机——基数

时间:2023-05-18 20:23:27浏览次数:33  
标签:计算机 int sum arr2 carry 基数 stack

以10进制数“1234”为例

数码:数中的每一个数字。1、2、3、4

位数:数码在这个数中的位置。从右到左开始递增。如4的位数是0;1的位数是3

基数:每一位数码可以有多少个数字来表示。十进制的基数是十;二进制的基数是二

位权:对于多位数,处在某一位的“1”所表示的数值的大小。十进制的第二位的位权是10,第三位的位权是100。公式为  基数的位数次

 

基础知识补充完了。问题来了——

负二进制数相加

给出基数为 -2 的两个数 arr1 和 arr2,返回两数相加的结果。

数字以 数组形式 给出:数组由若干 0 和 1 组成,按最高有效位到最低有效位的顺序排列。例如,arr = [1,1,0,1] 表示数字 (-2)^3 + (-2)^2 + (-2)^0 = -3。数组形式 中的数字 arr 也同样不含前导零:即 arr == [0] 或 arr[0] == 1。

返回相同表示形式的 arr1 和 arr2 相加的结果。两数的表示形式为:不含前导零、由若干 0 和 1 组成的数组

来源:力扣(LeetCode)

     1、前导0和后导0

                  前导0:int a= 01   此时可以输入,参与运算,输出(前导0被忽略)可以使用格式化%02d  表示不足两位数字在数字面前加0.

                  后导0:%.2f

      2、不需要导0

                一、 利用类型转换  double转为int类型

                二、利用正则表达式     去掉多余的0和.

               三、利用字符串操作    double——String——arry[]

 

 1 public int[] addNegabinary(int[] arr1, int[] arr2) {
 2     int i = arr1.length - 1, j = arr2.length - 1, carry = 0;
 3     Stack<Integer> stack = new Stack<>();
 4     while (i >= 0 || j >= 0 || carry != 0) {
 5         int sum = carry;
 6         if (i >= 0) sum += arr1[i--];
 7         if (j >= 0) sum += arr2[j--];
 8         stack.push(sum & 1);
 9         carry = -(sum >> 1); // 注意这里的负号
10     }
11     while (!stack.isEmpty() && stack.peek() == 0) {
12         stack.pop();
13     }
14     if (stack.isEmpty()) {
15         return new int[]{0};
16     }
17     int[] res = new int[stack.size()];
18     for (int k = 0; !stack.isEmpty(); k++) {
19         res[k] = stack.pop();
20     }
21     return res;
22 }

该解决方案使用栈来存储计算结果。从数组的最后一位开始相加,如果有进位,则将进位保存到变量carry中。由于是基数为-2,因此进位是负数,需要将sum向右移位并加上负号。将每次相加的结果的最后一位保存到栈中,最后将栈中的元素转换为数组形式返回即可。注意在转换数组的时候需要注意去除前导零。

 

再来看官方的解析:

 

标签:计算机,int,sum,arr2,carry,基数,stack
From: https://www.cnblogs.com/liang9479/p/17412612.html

相关文章

  • 计算机网络知识整理
    计算机网络知识整理OSI(OpenSystemInterconnectionModel)七层协议:应用层(ApplicationLayer),表示层(PrensentationLayer),会话层(SessionLayer),传输层(TransportLayer),网络层(NetWorkLayer),数据链路层(DataLinkLayer),物理层(PhysicsLayer)。(从上到下)TCP/IP四层协议:应用层......
  • Python之计算机要点
    Python之计算机要点:1.计算机的概念:计算机俗称电脑,是现代用于高速计算的机器特点:数值计算存储记忆功能逻辑计算总结:能够按照程序运行、自动、高速处理数据的现代化智能电子设备计算机的组成:硬件+软件软件:就是一系列按照特定顺序组织的计算机数据和特定指令的集合2.计算机语言:......
  • 希望计算机专业同学都知道这些博主
    湖科大教书匠——计算机网络“宝藏老师”、“干货满满”、“羡慕湖科大”...这些都是网友对这门网课的评价,可见网课质量之高!最全面的面试网站湖南科技大学《计算机网络》微课堂是该校高军老师精心制作的视频课程,用简单的语言描述复杂的问题,用生动的动画演示抽象概念,更加便于学生......
  • 计算机组成原理-第四章 指令系统
    指令系统概述指令指令:特指要计算机执行某种操作的命令。本章所讨论的指令特指机器指令。指令系统一台计算机中所有机器指令的集合,称为这台计算机的指令系统(指令集)。指令系统的性能要求1.完备性用汇编语言编写各种程序时,指令系统直接提供的指令足够使用,而不必用软件来实......
  • 虚拟机计算机网络与物理机网络心得随笔
    虚拟机网络有三种模式:桥接模式、NAT模式、仅主机模式1.桥接模式虚拟机与物理机使用同一个网段,手写ip地址需要在写在同一个网段(什么是一个网段?192.168.31.xxx所有的这种都是一个网段)下面,子网掩码是为了掩盖、传递某些信息的,默认网关一个网段下面只有一个默认网关,所以往往子......
  • 计算机操作系统的基本概念及功能
     GUI(图形用户界面):如windows、安卓、ios的图形操作界面;命令接口(可以直接使用):联机命令接口特点是说一句做一句,脱机命令接口是说一堆做一堆;程序接口:系统调用,用户通过程序进行间接使用......
  • 计算机网络学习笔记之数据链路层的介质访问控制
    计算机网络学习笔记之数据链路层的介质访问控制介质访问控制信道划分介质访问控制随机访问介质访问控制ALOHA协议(不听就说)纯ALOHA协议时隙ALOHA协议比较CSMA协议(先听再说)坚持CSMA非坚持CSMAp-坚持CSMA比较CSMA/CD协议(先听再说,边听边说)......
  • 程序员不得不了解的计算机进制转换
    程序员不得不了解的计算机进制转换最近在备考软考的软件设计师考试,学到了关于计算机的数据表示,由于我是半路出家学的Java,导致计算机基础知识很差,在这里记录一下学习感受为啥要用二进制早期计算机的存储介质是晶体管,晶体管根据电压不同,只能表示2种状态,也就是0和1计算机使用二......
  • 计算机专业就业方向汇总
            前面笔者写过关于学习的方向博文(IT软件人员的技术学习内容(写给技术迷茫中的你)-项目管理系列文章),也对项目组人员进行过总结(软件项目角色指南),但是,到了笔者这个年纪,对于计算机专业方向的人来说,选好就业方向的工作岗位内容很重要。所以,笔者就写了此博文,对当前......
  • 合作谱新篇 携手同发展 | 热烈欢迎中国计算机学会(CCF)苏州一行走访璞华!
    5月7日下午,以“合作谱新篇携手同发展“为主题的“2023年CCF(中国计算机协会)苏州走进璞华”活动在璞华苏州总部成功举办。CCF副秘书长束庆山、CCF苏州分会主席龚声蓉、CCF苏州分部副主席胡伏原、璞华公司董事长管祥红等20多位专家、企业家出席活动。活动伊始,璞华集团董事长管祥......