刷题强训(day06) -- 大数加法、链表相加、大数乘法

news2024/11/14 0:05:13

目录

1、大数加法

1.1 题目

1.2 思路

1.3 代码实现

2、链表相加(二)

2.1 题目

2.2 思路

2.3 代码实现

3、大数乘法

3.1 题目

3.2 思路

3.3 代码实现


1、大数加法

1.1 题目

1.2 思路

这道题可以模拟列竖式相加解答, 将每一位都转换为数字求和,最后在转回字符串返回。

先求得两个字符串的长度,采用预处理一位一位的相加,定义一个变量表示进位

最后,我们算完后是逆序的结果,应该输出正序的结果,所以用reverse逆置一下

1.3 代码实现

class Solution {
public:
    string solve(string s, string t) 
    {
        string ret;
        int i = s.size() - 1,j = t.size() - 1;
        int tmp = 0;//表示进位
        while(i >= 0 && j >= 0 || tmp > 0) //模拟加法
        {
            if(i >= 0)
                tmp += s[i--] - '0';
            if(j >= 0)
                tmp += t[j--] - '0';
            ret += tmp % 10 + '0';
            tmp /= 10;
        }
        reverse(ret.begin(),ret.end());

        return ret;
    }
};

2、链表相加(二)

2.1 题目

2.2 思路

这题和上题类似,只不过是用链表完成加法,用高精度加法,先把原来的链表逆序,在使用高精度加法

创建一个虚拟头结点,就可以不用考虑节点为空的情况了,因为要链表都需要逆序,所以可以先封装一个逆序函数,模拟头插,循环插入,直到链表逆序,然后循环实现个位上的加法

2.3 代码实现

记得定义一个next记录原链表的下一个节点,否则cur不能回去原链表继续遍历

class Solution 
{
public:
    ListNode* reverse(ListNode* head)
    {
        ListNode* newhaead = new ListNode(0);
        ListNode* cur = head;

        while(cur)
        {
            ListNode* next = cur->next;
            cur->next = newhaead->next;
            newhaead->next = cur;
            cur = next;
        }
        cur = newhaead->next;
        delete[] newhaead;
        return cur;
    }

    ListNode* addInList(ListNode* head1, ListNode* head2) 
    {   //逆序
        head1 = reverse(head1);
        head2 = reverse(head2);

        int t = 0;//标记进位
        ListNode* cur1 = head1,*cur2 = head2;
        ListNode*ret = new ListNode(0);
        ListNode* prev = ret;
        while(cur1 ||cur2 || t)//大数加法
        {
            if(cur1)
            {
                t += cur1->val;
                cur1 = cur1->next;
            }
            if(cur2)
            {
                t += cur2->val;
                cur2 = cur2->next;
            }
            prev->next = new ListNode(t%10);
            prev = prev->next;
            t /= 10;
        }
        prev = ret->next;
        ret->next = nullptr;
        delete[] ret;

        prev = reverse(prev);
        return prev;
        
    }
};

3、大数乘法

3.1 题目

3.2 思路

 这道题也和第一题类似,不过这道题是实现字符串乘法,化繁为简,把乘数换成加法运算

无进位相乘

用无进位相乘,下标映射会非常舒服

3.3 代码实现

注意进位未处理和先导0

class Solution {
public:
    string solve(string s, string t) 
    {
       reverse(s.begin(),s.end());
       reverse(t.begin(),t.end());
       int m = s.size(),n = t.size();
       vector<int> tmp(m+n);

        // 无进位相乘相加,先固定s中一个数
       for(int i = 0;i < m;i++)
       {    //然后依次与t中的数相乘
        for(int j = 0;j < n;j++)
        {
            tmp[i+j] += (s[i]-'0') * (t[j]-'0');   
        }
       }
       //处理进位
       int k = 0;
       string ret;
       for(auto x : tmp)
       {
            k += x;
            ret += k % 10 +'0';
            k /= 10;
       }
       while(k)
       {    //防止还有进位未处理
            ret += k%10 +'0';
             k /= 10;
       }
        while(ret.size() > 1 && ret.back()=='0')
            ret.pop_back(); //处理前导0
        reverse(ret.begin(),ret.end());
        return ret;
    }
};


本篇完,下篇见!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字后端教程之Innovus report_property和get_property使用方法及应用案例

数字IC后端实现Innovus中使用report_property可以报告出各种各样object的属性&#xff0c;主要有cell&#xff0c;net&#xff0c;PG Net&#xff0c;Pin&#xff0c;时钟clock&#xff0c;时序库lib属性&#xff0c;Design属性&#xff0c;timing path&#xff0c;timin arc等…

网络基础 - 网段划分篇

我们知道&#xff0c;IP 地址(IPv4 地址)由 “网络标识(网络地址)” 和 “主机标识(主机地址)” 两部分组成&#xff0c;例如 192.168.128.10/24&#xff0c;其中的 “/24” 表示从第 1 位开始到多少位属于网络标识&#xff0c;那么&#xff0c;剩余位就属于主机标识了&#xf…

python实战(八)——情感识别(多分类)

一、任务目标 本文使用的是来自Kaggle的一个情感识别数据集&#xff0c;这个数据集的总数据量是5934条&#xff0c;标签为anger、fear、joy三种情感的其中一种&#xff0c;很明显是一个多分类任务。这里&#xff0c;我们将使用微调技巧进行深度学习建模&#xff0c;同时我们会比…

23423234

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

opencv入门学习总结

opencv学习总结 不多bb&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; 案例一&#xff1a; import cv2 # 返回当前安装的 OpenCV 库的版本信息 并且是字符串格式 print(cv2.getVersionString()) """ 作用&#xff1a;它可以读取不同格式的图像文…

MySQL 中的索引下推功能

看到索引&#xff0c;应该大家都可以联想到这个是和查询效率有关系的&#xff0c;既然有这个功能&#xff0c;那么那句古话说的好啊&#xff1a;存在即合理。那么这个就是说有了这个功能&#xff0c;可以提升查询效率。 什么是索引下推 我们先有一个大概的理解&#xff1a;在…

重拾CSS,前端样式精读-媒体查询

前言 本文收录于CSS系列文章中&#xff0c;欢迎阅读指正 说到媒体查询&#xff0c;大家首先想到的可能是有关响应式的知识点&#xff0c;除此之外&#xff0c;它还可以用于条件加载资源&#xff0c;字体大小&#xff0c;图像和视频的优化&#xff0c;用户界面调整等等方面&am…

物理设备命名规则(Linux网络服务器 15)

Linux系统中的一切都是文件&#xff0c;硬件设备也不例外。既然都是文件&#xff0c;就必须有文件名称。系统内核中udev设备管理器会自动把硬件名称规范化起来&#xff0c;目的是让用户通过设备文件的名字可以大致了解设备属性以及分区信息。这对于陌生的设备来说特别方便。另外…

NVIDIA NIM 开发者指南:入门

NVIDIA NIM 开发者指南&#xff1a;入门 NVIDIA 开发者计划 想要了解有关 NIM 的更多信息&#xff1f;加入 NVIDIA 开发者计划&#xff0c;即可免费访问任何基础设施云、数据中心或个人工作站上最多 16 个 GPU 上的自托管 NVIDIA NIM 和微服务。 加入免费的 NVIDIA 开发者计…

猿创征文|Inscode桌面IDE:打造高效开发新体验

猿创征文&#xff5c;Inscode桌面IDE&#xff1a;打造高效开发新体验 引言 在当今快速发展的软件开发领域&#xff0c;一个高效、易用的集成开发环境&#xff08;IDE&#xff09;是每个开发者必不可少的工具。Inscode 桌面 IDE 作为一款新兴的开发工具&#xff0c;凭借其强大…

力扣 LeetCode 142. 环形链表II(Day2:链表)

解题思路&#xff1a; 使用set判断是否重复添加&#xff0c;如果set加入不进去证明之前到达过该节点&#xff0c;有环 public class Solution {public ListNode detectCycle(ListNode head) {Set<ListNode> set new HashSet<>();ListNode cur head;while (cur …

激活函数解析:神经网络背后的“驱动力”

神经网络中的激活函数&#xff08;Activation Function&#xff09;是其运作的核心组件之一&#xff0c;它们决定了神经元如何根据输入信号进行“激活”&#xff0c;进而影响整个模型的表现。理解激活函数的工作原理对于设计和优化神经网络至关重要。本篇博客将深入浅出地介绍各…

基于表格滚动截屏(表格全部展开,没有滚动条)

import html2canvasPro from html2canvas // 截图&#xff0c;平辅表格 async function resetAgSize() {const allColumns gridApi.value.getColumns()let totalColumnWidth 0let totalColumnHeight 0// 遍历每一个行节点gridApi.value.forEachNode((rowNode) > {totalCo…

vs2015QT项目添加多语言翻译总结

一、简介 当软件有国际化的需求时&#xff0c;就需要多语言翻译功能&#xff0c;最常见的语言就是支持中文和英语&#xff0c;本文介绍在vs2015QT环境下&#xff0c;进行国际化翻译的具体流程。 二、多语言翻译实现流程 1.底层实现原理介绍 QT写的客户端软件&#xff0c;能…

wireshark演进之路——从GTK到Qt

Wireshark 自 1998 年诞生至今&#xff0c;已有超过26年的历史了。它最早由 Gerald Combs 创建&#xff0c;最初名为 Ethereal。2006 年&#xff0c;Ethereal 更名为 Wireshark&#xff0c;并继续发展成了全球领先且人尽皆知的网络协议分析工具&#xff0c;其GUI演变就是其中非…

哈希表的实现--C++

文章目录 一、哈希概念1.1、直接定址法1.2、哈希冲突1.3、负载因子1.4、将关键字转为整数1.5、哈希函数1.5.1、除法散列法/除留余数法1.5.2、乘法散列法1.5.3、全域散列法1.5.4、其他方法 二、处理哈希冲突2.1、开放定址法2.1.1、线性探测2.1.2、二次探测2.1.3、双重散列2.1.4、…

Python学习从0到1 day26 第三阶段 Spark ② 数据计算Ⅰ

人总是会执着于失去的&#xff0c;而又不珍惜现在所拥有的 —— 24.11.9 一、map方法 PySpark的数据计算&#xff0c;都是基于RDD对象来进行的&#xff0c;采用依赖进行&#xff0c;RDD对象内置丰富的成员方法&#xff08;算子&#xff09; map算子 功能&#xff1a;map算子…

D67【python 接口自动化学习】- python基础之数据库

day67 Python操作MySQL基础使用 学习日期&#xff1a;20241113 学习目标&#xff1a;MySQL数据库-- 136 Python操作MySQL基础使用 学习笔记&#xff1a; pymysql 创建MySQL的数据库链接 执行sql语句 总结 Python中使用第三方库&#xff1a;pymysql来操作MySQL&#xff0c;…

Linux驱动开发基础——Hello驱动程序(一)

目录 一、Hello驱动 一、Hello驱动 我们选用的内核都是 4.x 版本&#xff0c;操作都是类似的&#xff1a; 1.1、APP 打开的文件在内核中如何表示 open函数原型&#xff1a; int open(const char *pathname, int flags, mode_t mode); 仔细看函数的参数&#xff0c;再对比看 内…

2.初始sui move

vscode安装move插件 查看sui 客户端版本号 sui client --version 创建新项目 sui move new <项目名> sui move new hello_world 项目目录结构&#xff1a; hello_world ├── Move.toml ├── sources │ └── hello_world.move └── tests└── hello_world…