首页 > 编程语言 >[Python手撕]大数加法

[Python手撕]大数加法

时间:2024-08-31 11:38:48浏览次数:5  
标签:arr num1 num2 大数 Python res temp 加法 print

num1 = input()
num2 = input()

def compare(num1,num2):
    for i in range(len(num1)):
        if num1[i]>num2[i]:
            return 0
        elif num1[i]<num2[i]:
            return 1
    return 2

# 解析符号
flag1 = 0
flag2 = 0

if num1[0] == "-":
    flag1 = 1
    num1 = num1[1:]
if num2[0] == "-":
    flag2 = 1
    num2 = num2[1:]

# 对齐数位
num1_len = len(num1)
num2_len = len(num2)

if num1_len < num2_len:
    for _ in range(num2_len - num1_len):
        num1 ="0" + num1
else:
    for _ in range(num1_len - num2_len):
        num2 ="0" + num2

# 制作返回数组

num1_arr = [int(c) for c in num1]
num2_arr = [int(c) for c in num2]
length = len(num1)

if flag1 == 0 and flag2 == 0:
    res = [0]*(length+1)
    temp = 0
    for i in range(length-1,-1,-1):
        if num1_arr[i]+num2_arr[i]+temp >= 10:
            res[i+1] = num1_arr[i]+num2_arr[i]+temp -10
            temp = 1
        else:
            res[i+1] = num1_arr[i]+num2_arr[i]+temp
            temp = 0
    if temp == 1:
        res[0] = 1

    if res[0] == 1:
        print("".join(str(c) for c in res))
    else:
        print("".join(str(c) for c in res[1:]))
if flag1 == 1 and flag2 == 1:
    res = [0]*(length+1)
    temp = 0
    for i in range(length-1,-1,-1):
        if num1_arr[i]+num2_arr[i]+temp >= 10:
            res[i+1] = num1_arr[i]+num2_arr[i]+temp -10
            temp = 1
        else:
            res[i+1] = num1_arr[i]+num2_arr[i]+temp
            temp = 0
    if temp == 1:
        res[0] = 1

    if res[0] == 1:
        print("-"+"".join(str(c) for c in res))
    else:
        print("-"+"".join(str(c) for c in res[1:]))
if flag1 == 1 and flag2 == 0:
    res = [0]*length
    if compare(num1_arr,num2_arr) == 0:
        for i in range(length-1,-1,-1):
            if num1_arr[i]>=num2_arr[i]:
                res[i] = num1_arr[i] - num2_arr[i]
            else:
                num1_arr[i-1] -= 1
                res[i] = num1_arr[i]+10 - num2_arr[i]
        for i in range(len(res)):
            if res[i] != 0:
                print("-"+"".join(str(c) for c in res[i:]))
                break
    elif compare(num1_arr,num2_arr) == 1:
        for i in range(length-1,-1,-1):
            if num2_arr[i]>=num1_arr[i]:
                res[i] = num2_arr[i] - num1_arr[i]
            else:
                num2_arr[i-1] -= 1
                res[i] = num2_arr[i]+10 - num1_arr[i]
        for i in range(len(res)):
            if res[i] != 0:
                print("".join(str(c) for c in res[i:]))
                break
    elif compare(num1_arr,num2_arr) == 2:
        print("0")
if flag1 == 0 and flag2 == 1:
    res = [0]*length
    if compare(num1_arr,num2_arr) == 0:
        for i in range(length-1,-1,-1):
            if num1_arr[i]>=num2_arr[i]:
                res[i] = num1_arr[i] - num2_arr[i]
            else:
                num1_arr[i-1] -= 1
                res[i] = num1_arr[i]+10 - num2_arr[i]
        for i in range(len(res)):
            if res[i] != 0:
                print("".join(str(c) for c in res[i:]))
                break
    elif compare(num1_arr,num2_arr) == 1:
        for i in range(length-1,-1,-1):
            if num2_arr[i]>=num1_arr[i]:
                res[i] = num2_arr[i] - num1_arr[i]
            else:
                num2_arr[i-1] -= 1
                res[i] = num2_arr[i]+10 - num1_arr[i]
        for i in range(len(res)):
            if res[i] != 0:
                print("-"+"".join(str(c) for c in res[i:]))
                break
    elif compare(num1_arr,num2_arr) == 2:
        print("0")

标签:arr,num1,num2,大数,Python,res,temp,加法,print
From: https://www.cnblogs.com/DCFV/p/18390034

相关文章

  • [Python手撕]环的检测
    检测环快慢指针法是一种用于检测链表中是否存在环的有效方法,同时也可以找到环的起点。该方法的原理基于两个指针在链表上同时移动,其中一个移动得更快,而另一个移动得更慢。检测环的存在:使用两个指针,一个称为快指针(fast),一个称为慢指针(slow)。在每一步中,快指针向前移动两步,而慢......
  • [Python手撕]二分法
    二分法二分法的几个位置比如01234567891233333456有时候想要寻找小于3的最大数字有时候想要寻找第一个满足>=3的数字,有时候想要寻找最后一个满足>=3的数字,有时候想要寻找小于4的最大数字nums=[1,2,3,4,5,5,5,5,5,6,7,8,9]n=......
  • [Python手撕]TOPK
    TOPK问题描述:从arr[1,n]这n个数中,找出最大的k个数,这就是经典的TopK问题。栗子:从arr[1,12]={5,3,7,1,8,2,9,4,7,2,6,6}这n=12个数中,找出最大的k=5个。整体排序排序是最容易想到的方法,将n个数排序之后,取出最大的k个,即为所得。伪代码:sort(arr,1,n);returnarr[1,k];......
  • 豆包 API 调用示例代码详解-Python版
    文章目录豆包API调用示例代码详解-Python版一、事前准备二、所需Python包三、代码详解五、源码下载四、总结豆包官方API文档豆包API调用示例代码详解-Python版在本文中,我们将详细介绍如何使用Python调用豆包API,并提供相关的事前准备和代码执行步骤。一、......
  • 使用 Python 实现自动化办公
    使用Python实现自动化办公在现代办公环境中,自动化是提高工作效率和减少人为错误的重要手段之一。Python是一种功能强大且灵活的编程语言,可以轻松地实现自动化办公任务。下面是一个简单的示例,展示如何使用Python实现自动化办公:需求:假设我们有一个Excel文件,名为"报表.xls......
  • [Python办公]一文入门图论Graphs,轻松处理最短路径等问题!
            [Python办公]一文入门图论Graphs,轻松处理最短路径等问题!        图论是研究图这种数学结构的性质和应用的学科。图(Graphs)由节点(或顶点)和连接这些节点的边组成,它是一种强大的数据结构,广泛应用于各种领域。以下举例用最短距离来入门图论。入门问题: ......
  • Python数据清洗基础
    在Python中进行数据清洗和可视化是一个多步骤的过程,涉及到数据的读取、预处理、分析和图形表示。以下是一些关键步骤和代码示例,这些步骤可以帮助你从原始数据中提取有价值的信息,并以直观的方式展示。数据清洗读取数据:importpandasaspddata=pd.read_csv('data.csv')处......
  • [Python知识点]list列表append()和extend()的区别
    在Python中,list.append()和list.extend()都是列表(list)的方法,用于添加元素,但它们的工作方式有所不同:list.append(x):这个方法将对象x添加到列表的末尾。x可以是任何数据类型,包括列表。如果x是一个列表,那么这个列表会被作为一个单个元素添加到原列表的末尾。list.extend(itera......
  • 6种有效的时间序列数据特征工程技术(使用Python)
    在商业分析中,"时间"是一个核心概念。我们基于时间组件来分析销售数据、收入、利润、增长,甚至进行预测。然而,对于初学者来说,这可能是一个复杂的主题。在处理时间敏感的数据集时,需要考虑时间序列数据的多个细微方面。在这个领域,没有放之四海而皆准的方法。我们不必总是强制使用传......
  • python学习总结--面向对象
    1.面向对象(上)1.1定义面向对象编程:oop[objectorientedprogramming]是一种python的编程思路;面向过程:就是我们一开始学习的,按照解决问题的步骤去写代码【根据业务逻辑去写代码】,在思考问题的时候,首先分析'怎么按照步骤去实现'然后将问题解决拆解成若干个步骤,并将这些步骤对......