02.两数相加

题目:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

思路:

1.分别对两个字符串进行遍历,使用一个变量进行进位的保留。当两个字符串中有一个为空时,跳出循环,对进位进行加减。

2.使用中间量进行两个字符串的代替,只用一次循环就可以解决

 

1.

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        head=l1
        t=None
        a=0
        while l1 and l2:
            l1.val = l2.val + a +l1.val
            if l1.val > 9:
                l1.val-=10
                a=1
            else:
                a = 0
            t=l1
            l1=l1.next
            l2=l2.next
            
        if l2:
            t.next=l2

        if a==0:
            return head
        elif t.next == None:
            t.next = ListNode(a)
            a=0
        else:
            while t.next and a:
                t = t.next
                t.val+=a
                if t.val > 9:
                    t.val -= 10
                else:
                    a=0
        if a:
            t.next = ListNode(a)
        
        return head

2.

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        head = ListNode(0)
        p = head
        n3 = 0
        while l1 or l2:
            n1 = l1.val if l1 else 0
            n2 = l2.val if l2 else 0
            c = n1 + n2 + n3
            p.next = ListNode(c % 10)
            n3 = c // 10
            p = p.next 
            l1 = l1.next if l1 else None
            l2 = l2.next if l2 else None
        if n3:
            p.next = ListNode(1)
        
        return head.next
           

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
汇编语言中,可以使用条件转移指令(如JZ、JNZ等)进行条件判断,实现根据结果大小的不同来选择不同的输出方式。 以下是一段示例代码,实现两个十进制数相加,如果结果大于9,则将结果转换为十六进制并输出: ``` MOV AX, 5 ; 第一个数 MOV BX, 7 ; 第二个数 ADD AX, BX ; 相加 CMP AX, 9 ; 判断是否大于9 JLE DECIMAL ; 如果不大于9,输出十进制结果 ADD AH, 06H ; 如果大于9,将高位加6 DAA ; 将结果调整为十六进制格式 JMP HEX ; 跳转到输出十六进制结果的代码 DECIMAL: ; 输出十进制结果 MOV AH, 02H ; 设置输出字符函数号 MOV DL, AH ; 将结果转换为ASCII码 ADD DL, 30H ; 加上30H得到十进制字符 INT 21H ; 输出字符 JMP END HEX: ; 输出十六进制结果 MOV AH, 02H MOV DL, AH AND DL, 0FH ; 取低4位得到十六进制字符 CMP DL, 9 ; 如果是10~15,转换为A~F JBE HEX_CHAR ADD DL, 07H HEX_CHAR: ADD DL, 30H ; 加上30H得到十六进制字符 INT 21H MOV DL, AH ; 取高4位重复上述过程 SHR DL, 4 AND DL, 0FH CMP DL, 9 JBE HEX_CHAR ADD DL, 07H ADD DL, 30H INT 21H END: ``` 这段代码中,首先将两个十进制数存入AX和BX寄存器中,然后使用ADD指令相加。接着,使用CMP指令比较结果是否大于9,如果不大于9,则跳转到DECIMAL标签处输出十进制结果;如果大于9,则使用ADD和DAA指令将结果调整为十六进制格式,并跳转到HEX标签处输出十六进制结果。在输出十六进制结果时,需要将结果的高4位和低4位分别转换为十六进制字符并输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值