算法笔记day03

news2024/11/27 12:40:10

目录

1. 大数加法

2.链表相加(二)

3.大数乘法


1. 大数加法

大数加法_牛客题霸_牛客网

算法思路:

这就是一道模拟题,模拟加法列竖式运算的过程

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算两个数之和
     * @param s string字符串 表示第一个整数
     * @param t string字符串 表示第二个整数
     * @return string字符串
     */
    string solve(string s, string t) 
    {
        int m = s.size() -1, n = t.size() -1;

        int tmp = 0;//保存进位
        string ret; 
        while (m >= 0 || n >= 0 || tmp) 
        {
            if(m >= 0)
            {
                tmp += s[m--] - '0';
            }

            if(n >= 0)
            {
                tmp += t[n--] - '0';
            }

            ret += tmp % 10 + '0';
            tmp /= 10;
        }
        reverse(ret.begin(), ret.end());
        return ret;
    }
};

2.链表相加(二)

链表相加(二)_牛客题霸_牛客网

算法思路:

这道题与上一道题类似,只不过换成了链表,只需要注意第一步一定要先将链表逆置,其他的步骤与上一题相同。

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    ListNode* reverse(ListNode *head)//是用头插法逆直链表
    {
        ListNode * newhead = new ListNode(0);//添加一个头节点
        ListNode * cur = head;
        while (cur) 
        {
            ListNode * next = cur->next;
            cur->next = newhead->next;
            newhead->next = cur;
            cur = next;
        }
        cur = newhead->next;
        delete newhead;
        return cur;
    }

    ListNode* addInList(ListNode* head1, ListNode* head2) 
    {
        head1 = reverse(head1);
        head2 = reverse(head2);
        int tmp = 0;
        ListNode * cur1 = head1;
        ListNode * cur2 = head2;
        ListNode * ret = new ListNode(0);
        ListNode * prev = ret;    
        while (cur1 || cur2 || tmp) 
        {
            if(cur1)
            {
                tmp += cur1->val;
                cur1 = cur1->next;
            }

            if(cur2)
            {
                tmp += cur2->val;
                cur2 = cur2->next;
            }

            prev->next = new ListNode(tmp % 10);
            prev = prev->next;
            tmp /= 10;
        }

        prev = ret;
        ret = ret->next;
        delete prev;
        ret = reverse(ret);
        return ret;
    }
};

3.大数乘法

大数乘法_牛客题霸_牛客网

算法思路:

同样也是一道模拟题,使用无进位相乘相加进行优化。

使用数组将每一位都存储起来,最后统一处理进位

#include <iterator>
class Solution {
public:
    string solve(string s, string t) 
    {
        reverse(s.begin(), s.end());
        reverse(t.begin(), t.end());

        string ret;
        int n = s.size(), m = t.size();
        vector<int> v(m + n);

        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                v[i + j] += (s[i] - '0') * (t[j] - '0');
            }
        }

        //处理进位
        int c = 0;
        for(int x : v)
        {
            c += x;
            ret += c % 10 + '0';
            c /= 10;
        }

        while(c)
        {
            ret += c % 10 + '0';
            c /= 10;
        }

        while(ret.size() > 1 && ret.back() == '0')
        {
            ret.pop_back();
        }

        reverse(ret.begin(), ret.end());
        return ret;
    }
};

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

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

相关文章

大模型存储选型 JuiceFS 在关键环节性能详解

从去年开始&#xff0c;LLM大语言模型领域发展迅速、如 LLaMA、ChatGLM、Baichuan、Qwen 和 yi-model 等基础模型&#xff08;Foundation Models&#xff09;的数量显著增加。众多企业也开始基于这些基础模型做 post-training 的相关工作&#xff0c;以开发特定垂直领域的模型实…

唯一客服浏览器插件: 视频号直播自动回复与循环发送话术-自动化插件

唯一客服浏览器插件 gofly.v1kf.com 我们在做视频号直播的时候&#xff0c;会有这种自动回复咨询问题的功能唯一客服浏览器插件现在就支持&#xff0c;在视频号直播后台&#xff0c;自动化回复用户问题&#xff0c;以及循环发送我们的介绍话术

vscode gitlens收费破解

首先打开vscode 插件栏 搜索GitLens 找到对应插件 这里我已经安装完成&#xff0c;如果未安装的点击install 并且下载指定版本V15.1.0 不然后续操作 不生效 找到对应面板 点击查看GitLens 安装完成后&#xff0c;并不能立即使用 显示一下内容&#xff0c;需要付费 这里很关键&…

Breach 2.1靶机渗透

项目地址 plain https://download.vulnhub.com/breach/Breach-2_final2.1.zip 实验过程 根据靶机的描述得知该靶机适用于静态ip&#xff0c;即192.168.110.151 配置虚拟机的虚拟网络编辑器的仅主机模式&#xff0c;将其子网IP配置在110网段&#xff0c;并将攻击机kali和靶机…

VSCode连接本地的虚拟机的一遍过步骤

一. 首先要在虚拟机的Linux上安装 openssh-server 1. 安装 sudo apt-get remove openssh-server # 先卸载&#xff0c;无论咋样都先做一下&#xff0c;以免出现问题 sudo apt-get install openssh-server # 安装 sudo service ssh --full-restart # 重启ssh 服务…

Java 17 面向对象编程(基础篇),快速了解面试对象编程

小熊学Java​站点&#xff1a;https://www.javaxiaobear.cn 本章汇总 学习面向对象内容的三条主线 Java类及类的成员&#xff1a;&#xff08;重点&#xff09;属性、方法、构造器&#xff1b;&#xff08;熟悉&#xff09;代码块、内部类 面向对象的特征&#xff1a;封装、继…

servlet基础与环境搭建(idea版)

文章目录 环境变量配置安包装环境变量配置JDK 配置 静态网页动态网页&#xff08;idea&#xff09;给模块添加 web框架新版本 2023 之后的 idea&#xff0c;使用方法二idea 目录介绍建立前端代码启动配置 环境变量配置 tomcat 环境变量 安包装 环境变量配置 JDK 配置 静态网页…

GA-BP回归预测 | MATLAB实现GA-BP多输入单输出回归预测

回归预测 | MATLAB实现GA-BP多输入单输出回归预测 目录 回归预测 | MATLAB实现GA-BP多输入单输出回归预测预测效果基本介绍模型描述遗传算法神经网络GA-BP网络程序设计学习总结参考资料预测效果 基本介绍 MATLAB实现GA-BP多输入单输出回归预测,输入7个特征,输出1个,优化权重…

Meta发布高质量3D物体重建数据集:推动空间计算与XR技术的发展

Meta(原Facebook)近日宣布推出一个全新的高质量3D物体重建数据集——Digital Twin Collection (DTC),旨在推动空间计算、扩展现实(XR)、智能眼镜以及基于AI的3D重建研究。该数据集包含超过2,400个物理对象的3D模型,具有亚毫米级的几何精度和高度逼真的视觉效果。本文将详…

electron-vite打包踩坑记录

electron-vite打包踩坑记录 大前端已成趋势&#xff0c;用electron开发桌面端应用越来越普遍 近期尝试用electronvite开发了个桌面应用&#xff0c;electron-vite地址&#xff0c;可用使用vue开发&#xff0c;vite打包&#xff0c;这样就很方便了 但是&#xff0c;我尝试了一…

vue后台管理系统从0到1(3)element plus 的三种导入方式

文章目录 vue后台管理系统从0到1&#xff08;3&#xff09;element plus 的三种导入方式element plus 引入方式完整引入按需导入手动导入 vue后台管理系统从0到1&#xff08;3&#xff09;element plus 的三种导入方式 element plus 引入方式 官方网址&#xff1a;https://el…

51单片机的万年历【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块时钟模块按键蜂鸣器等模块构成。适用于电子万年历、数字时钟万年历等相似项目。 可实现功能: 1、LCD1602实时显示年月日星期和北京时间&#xff0c;具备闰年判断功能 2、按键可设置闹钟时间 3、按键可修改当前时…

vue后台管理系统从0到1(2)

文章目录 vue后台管理系统从0到1&#xff08;2&#xff09;前端项目构建nodejs版本开始构建 vue vite 项目项目清理项目依赖安装配置别名配置路由 vue-router vue后台管理系统从0到1&#xff08;2&#xff09; 前端项目构建 nodejs版本 因为我们是要构建一个 vue vite 的前…

Mycat引领MySQL分布式部署新纪元:性能与扩展性的双重飞跃

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

滚花螺纹的工艺

滚花是一种车加工的加工方法&#xff0c;目的是增加零件表面的摩擦力&#xff0c;例如&#xff1a;千分尺的旋钮位置就滚花了&#xff0c;这样手在转动旋钮时不会打滑。滚花使用是滚花刀&#xff0c;滚花并不是去除零件表面材料&#xff0c;而是使用滚花刀挤压零件表面&#xf…

决战Linux操作系统

前言&#xff1a; 你是否也曾经为Linux所困扰过&#xff0c;在网上找的资料零零散散&#xff0c;是否学完Linux后还是懵懵懂懂&#xff0c;别怕&#xff0c;这篇博客是博主精心为你准备的&#xff0c;现在&#xff0c;就让我们一起来走进Linux的世界&#xff0c;决战Linux&…

软件性能测试概述

1. 常见的性能问题 访问12306的时候&#xff0c;由于访问量过高导致该app系统崩了&#xff1b; 2. 性能测试 测试人员借助测试工具&#xff0c;模拟系统在不同的场景下&#xff0c;对应的性能指标是否达到预期&#xff1b; 3. 性能测试和功能测试 功能测试&#xff1a;人工来完…

智能制造与精益制造的模型搭建

现行制造模式分析I-痛点改善思路-管控省优四化推行

Github上的Markdown语法详解

今天在看Win32文档参与编写的说明时&#xff0c;看到里面提及 Our documentation is written in Markdown, a lightweight text style syntax. If youre not familiar with Markdown, you can learn the basics on GitHub. When unsure, 刚好&#xff0c;今天就来做个全面的总…

PyCharm 项目解释器切换指南:如何在项目中更换 Python Interpreter

PyCharm 项目解释器切换指南&#xff1a;如何在项目中更换 Python Interpreter 文章目录 PyCharm 项目解释器切换指南&#xff1a;如何在项目中更换 Python Interpreter一 Settings 设置二 Project 选项三 Conda Environment四 更换 Environment 本文详细介绍了在 macOS 系统中…