string的实际应用 -- 大数相加 、大数相乘
前言:哎,做题好难o(╥﹏╥)o,有时候想不到,而有时候则是想到了却没办法理清思路,转化为代码。有必要反思了┓(;´_`)┏,是否是做的太少了,或是自己的基础欠缺。
大学总是有些迷茫~
大数相加:
就简单的加法而言,我觉得口算也是很快了,生活完全够用,但一旦上了几十几百或更多,并且不是整十整百的,嗯~实在是难为我,有时候在家父母有时也揪着不放:“都上大学得到人了,口算这么差?” 我又不是人形计算器!!况且,就大学生而言,平均来说,是不是有些高估了?
(= ̄ω ̄=)喵了个咪
回归正题,大数相加,嗯,很大很大的数,有可能会溢出的那种┗( ▔, ▔ )┛。使用 return x * y; 这种明显不行了,换种思路,就到了今天我要说的了,对!就是将其用string解决。
但到底怎么解决呢?有些头疼呢~~
有兴趣的可以先思考思考,再往下面看。
思路:想想我们平常是怎么计算的?
1 2 3
+ 2 3 4
-------------
3 5 7遇到进位:
4 5 6
+ 7 8 9
-------------
15
向前进1
1 5
-------------
14 5
-------------
1<-4 5
--------------
1<-12 4 5
--------------
1 2 4 5小学就学过吧,想不到最年幼时学的东西竟可以陪伴我这么久,并且还是最实用的
!!!∑(゚Д゚ノ)ノ
不妨,我们就来模拟这个过程:将大数变为一位一位的小数相加
首先,这好像跟我们的string的顺序相反哎!!!怎么办?难道就这么放弃了吗?不,不如就反着算!最后再倒过来就行了。
那么,首先的把字符转化为数字,好说好说:x - '0' 即可,然后再相加,但得标记一下进位,于是:
//数一:num1 数二: num2
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
int next = 0;
//一个简单的三目操作符完成字符与数的转换
int n1 = end1 >= 0 ? num1[end1] - '0' : 0;
int n2 = end2 >= 0 ? num2[end2] - '0' : 0;int x = n1 + n2 + next;
next = x / 10;
x %= 10;//最后,next就是进位了, x就是最低位相加的结果了//找个字符串先存起来再说
string retnum;
retnum += (x + '0');
数字可能有很多位,用循环即可,每一次加在retnum后面就行了
string retnum;
int end1 = num1.size() - 1;
int end2 = num2.size() - 1;
int next = 0;
while (end1 >= 0 || end2 >= 0)
{int n1 = end1 >= 0 ? num1[end1--] - '0' : 0;int n2 = end2 >= 0 ? num2[end2--] - '0' : 0;int x = n1 + n2 + next;next = x / 10;x %= 10;//retnum.push_back(x + '0');retnum += ('0' + x);
}
当然,最高位相加也是有可能进位的!
if (next != 0)
{retnum += '1';
}
最后反转一下
reverse(retnum.begin(), retnum.end());
欧耶!终于完成了!
写完代码总是让我有很强的满足含感,不知道各位如何。
以下是完整代码,有需要的小伙伴可以自取:
class Solution {
public:string addStrings(string num1, string num2){string retnum;int end1 = num1.size() - 1;int end2 = num2.size() - 1;int next = 0;while (end1 >= 0 || end2 >= 0){int n1 = end1 >= 0 ? num1[end1--] - '0' : 0;int n2 = end2 >= 0 ? num2[end2--] - '0' : 0;int x = n1 + n2 + next;next = x / 10;x %= 10;//retnum.push_back(x + '0');retnum += ('0' + x);}if (next != 0){retnum += '1';}reverse(retnum.begin(), retnum.end());return retnum;}};
做完总得试一试呗:
int main()
{Solution S;string ret = S.addStrings("1234", "3457800000");cout << ret << endl;string ret1 = S.addStrings("1234452523", "345780000023");cout << ret1 << endl;return 0;
}//3457801234
//347014452546
//2460//D:\编程\text_c\greate_number_add\x64\Debug\greate_number_add.exe (进程 2344)已退出,代码为 //0 (0x0)。
//按任意键关闭此窗口. . .
大数相乘:
做完了大数相加,额,来个大数相乘练练手!(信心满满)
..............................
啊,貌似有些难度!
相乘的话,就不是简单的想同位相加(乘)了,每一位都得乘,这得很多位啊,数越大越多,脑子好像有些不够用了⊙(・◇・)?!!
别急,来让我们细细思考:平时我们在草稿纸上是怎么做的?
数一与数二相乘,数二的每一位都与数一的每一位相乘,并且随着数二从个位到百位千位......相乘所得的结果也在变大,即“天生进位!”(我命名的)。
数二的所有位与数一相乘后,最后相加得结果。
大数相加在上面我们已经完成了,接下来,只需要实现数二的每一位都与数一的每一位相乘,并且“天生进位”就可以了。
string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0")return"0";int end1 = num1.size() - 1;int end2 = num2.size() - 1;//定义一个字符串,用于记录每次相加的结果,最后用于返回string retnum("0");for (int i = end2; i >= 0; i--){//标记进位int next = 0;string cur;//char转intint x = num2[i] - '0';for (int j = end2; j > i; j--){//这一步就是用于数二数位的变大而准备的“天生进位”cur.push_back('0');}for (int j = end1; j >= 0; j--){//这里代码与大数相加很相似,只不过加换做了乘int y = num1[j] - '0';int n = x * y + next;next = n / 10;n %= 10;cur.push_back('0' + n);}//注意,由于是乘法,进位的数字有可能较大while (next != 0){cur.push_back(next % 10 + '0');next /= 10;}//反转reverse(cur.begin(), cur.end());//在这numadd就是大数相加了retnum = numadd(retnum, cur);}return retnum;
}
有大数相加的经验,我就不一一细讲了,相信你们举一反三都是手拿把掐!!
这里是完整代码,有需自取:
//大数相乘
class Solution1 {
public:string multiply(string num1, string num2) {if (num1 == "0" || num2 == "0")return"0";int end1 = num1.size() - 1;int end2 = num2.size() - 1;string retnum("0");for (int i = end2; i >= 0; i--){int next = 0;string cur;int x = num2[i] - '0';for (int j = end2; j > i; j--){cur.push_back('0');}for (int j = end1; j >= 0; j--){int y = num1[j] - '0';int n = x * y + next;next = n / 10;n %= 10;cur.push_back('0' + n);}while (next != 0){cur.push_back(next % 10 + '0');next /= 10;}reverse(cur.begin(), cur.end());retnum = numadd(retnum, cur);}return retnum;}string numadd(string num1, string num2){string retnum;int end1 = num1.size() - 1;int end2 = num2.size() - 1;int next = 0;while (end1 >= 0 || end2 >= 0){int n1 = end1 >= 0 ? num1[end1--] - '0' : 0;int n2 = end2 >= 0 ? num2[end2--] - '0' : 0;int x = n1 + n2 + next;next = x / 10;x %= 10;//retnum.push_back(x + '0');retnum += ('0' + x);}if (next != 0){retnum += '1';}reverse(retnum.begin(), retnum.end());return retnum;}
};
好了,本次分享就结束了,谢谢观看!!
但学习之路永无止境,即使是跑一会歇一会,我也会向前进!!
相关文章:
string的实际应用 -- 大数相加 、大数相乘
前言:哎,做题好难o(╥﹏╥)o,有时候想不到,而有时候则是想到了却没办法理清思路,转化为代码。有必要反思了┓(;_`)┏,是否是做的太少了,或是自己的基础欠缺。 大学总是有些迷茫~ …...
16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗
使用外部触发启动ADC 1、外部中断线EXTI11触发ADC2、外部定时器TIM2_CH2触发ADC3、ADC中模拟看门狗的使用 1、外部中断线EXTI11触发ADC ADC的触发方式有很多,一般情况都是使用软件触发反式启动ADC转换。除了软件触发方式还能使用外部事件触发启动ADC转换。如下图所…...
前端框架 react 性能优化
目录 一、不使用任何性能优化API进行优化 二、通过性能优化API优化 1、React.memo 2、useCallback 3、useMemo 4、PureComponent 三、总结 总览:react的优化核心思想就是让react跳过重新渲染那个些没有改变的Component,而只重新渲染发生变化的C…...
一加ACE 3 Pro手机无法连接电脑传输文件问题
先说结论:OnePlus手机无法连接电脑传输数据的原因,大概率是一加数据线的问题。尝试其他手机品牌的数据线(比如华为),再次尝试。 连接电脑方法: 1 打开开发者模式(非必要操作) 进入…...
✅ Qt流式布局
Qt流式布局 前段时间,曾经对某个软件的一个“流式布局”有点感兴趣,什么叫“流式布局”呢?请看下图: 简而言之,流式布局就是布局应能够根据界面尺寸的变化自动调整其内部控件的位置。然而,Qt 提供的标准布局ÿ…...
【微服务】RabbitMQ与SpringAMQP消息队列
一、初识MQ 1. 同步通讯 同步通讯就好比双方打电话,可以实时响应,但只能一对一,只能同时和一个人聊天。 异步通讯就好比两个人发信息,你发信息给对方,对方不一定给你回复,但是可以一对多,可…...
C++设计模式-中介者模式
动机(Motivation) 多个对象相互关联的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,可以使用一种”中介对象“来管理对象间的关联关系,避免…...
js实现分页效果
分页总结: 先写好html格式和css样式 再写js时先将他们都获取过来,设置一个k为页数的下标,num为每页的数据数量,pages为页数,并且获取json数据,再将data获取到全局 写for循环,设置一个变量为i…...
【WRF-Urban】多层建筑能源参数化模型概述:原理
【WRF-Urban】多层建筑能源参数化模型概述:原理 1 概述1.1 原理1.2 使用步骤 2参考 多层建筑能源参数化(Multi-layer Building Energy Parameterization, BEP)模型是一种用于模拟城市环境中多层建筑群的能量交换和微气候影响的参数化模型。该…...
ShuffleNet V2:高效卷积神经网络架构设计的实用指南
摘要 https://arxiv.org/pdf/1807.11164 当前,神经网络架构设计大多以计算复杂度的间接指标,即浮点运算数(FLOPs)为指导。然而,直接指标(例如速度)还取决于其他因素,如内存访问成本…...
1123--collection接口,list接口,set接口
目录 一 java 1. 集合 2. 集合框架图--remember 3. collection接口 3.1 collection接口的常用方法 3.1.1 add() 3.1.2 remove()-返回删除后的对象 3.1.3 contains()--返回布尔值 3.1.4 size&…...
基于BindingList的WinForm数据绑定机制与DataGridView动态刷新技术
前言: 本文以连接SQLite为例进行代码演示 一、首先建立里一个模型类 public class MyData{public int id { get; set; }public string name { get; set; }public int age { get; set; }public string sex { get; set; }public string address { get; set; }} 二、…...
大数据新视界 -- Hive 数据分区:精细化管理的艺术与实践(上)(7/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
对于相对速度的重新理解 - 插一句
因为发了太多的公式,系统提示插入图片太频繁,下一个部分稍后再写。 这里要强调一下: 狭义相对论的平方和形式,其实就是因为分不清虚数单位的大小才写成这个样子。或者用物理语言来说,就是认为所有惯性系的“光速”都…...
css基础(27)_行内、行内块元素之间的空白问题
行内、行内块元素之间的空白问题 产生的原因:行内元素、行内块元素,彼此之间的换行会被浏览器解析为一个空白字符。 案例一: <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8">&…...
如果接口返回值图片有很长一串码,需要添加前缀
需要在前面添加前缀:data:image/jpeg;base64,然后将值赋值给<img :src"originalImage" /> this.tableLists.map((item)>{item.originalImage "data:image/jpeg;base64,"item.originalImage})以上方法会导致出现一个小bug,…...
《AI大模型开发笔记》——ollama应用全面解析
入门篇 1 ollama是什么? Ollama 是一个支持在本地运行大语言模型的工具,兼容 Windows、Linux 和 MacOS 操作系统。使用 Ollama,您仅需一行命令即可启动模型。 2 如何安装? Windows和MacOS用户,从下面链接下载安装即可: 下载地址:https://ollama.com/download Linux系…...
Paddle Inference部署推理(三)
三:Paddle Inference推理 导出模型 Paddle Inference支持使用飞桨静态图模型进行推理,您可以通过以下两种方式获取静态图模型: (1)飞桨框架导出推理模型 飞桨框架在训练模型过程中,会在本地存储最终训练…...
CSP/信奥赛C++语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes
CSP/信奥赛C语法基础刷题训练(23):洛谷P1217:[USACO1.5] 回文质数 Prime Palindromes 题目描述 因为 151 151 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 151 …...
《跨越语言壁垒:Python 人工智能原型到 C++可执行程序的转型之路》
在人工智能的广阔天地里,Python 以其简洁易用和丰富的库资源成为众多开发者快速搭建人工智能原型的首选语言。然而,在一些对性能和资源控制要求极高的场景下,C则展现出无可比拟的优势。那么,如何将 Python 中开发的人工智能原型代…...
flowable流程图详细绘制教程
文章目录 前言一、flowable是什么?回答下之前的问题 二、flowable-modeler使用1. 使用步骤2.开始绘制弄一个请假的流程 三 加载该流程总结 前言 flowable有些晦涩难懂的东西: 我最开始接触的时候,还是用的activity,当时觉得好复杂,那么这次经过我自己在…...
Figma入门-基本操作制作登录页
Figma入门-基本操作制作登录页 前言 在之前的工作中,大家的原型图都是使用 Axure 制作的,印象中 Figma 一直是个专业设计软件。 最近,很多产品朋友告诉我,很多原型图都开始用Figma制作了,并且很多组件都是内置的&am…...
在windows操作系统上,用git与github账户连接
一、环境准备 1.1 git软件 1.2 github账号 1.3 创建一个项目目录,比如 D:\project\gitproject 二、开始操作 1. 进入项目目录下,右键,如图,打开git bash命令行 2. 在命令行输入以下三个命令 $ git config --global user.name &quo…...
springboot系列--拦截器执行原理
一、拦截器核心概念 一、定义 拦截器(Interceptor)是框架级别的组件,用于在请求的不同阶段(如到达控制器之前(也就是接口)、处理完成之后)动态地拦截和处理 HTTP 请求。 二、使用场景 一、用户…...
数据可视化复习2-绘制折线图+条形图(叠加条形图,并列条形图,水平条形图)+ 饼状图 + 直方图
目录 目录 一、绘制折线图 1.使用pyplot 2.使用numpy 编辑 3.使用DataFrame 编辑 二、绘制条形图(柱状图) 1.简单条形图 2.绘制叠加条形图 3.绘制并列条形图 4.水平条形图 编辑 三、绘制饼状图 四、绘制散点图和直方图 1.散点图 2…...
STM32F10x 定时器
使用定时器实现:B5 E5的开关 添加相关的.h路径文件 添加相关的.c配置文件 led.h文件 用于声明LED函数 #ifndef __LED_H //没有定义__LED_H #define __LED_H //就定义__LED_H #define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5) #defi…...
VBA技术资料MF230:展开所有折叠视图并恢复
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…...
【数据结构OJ】【图论】图综合练习--拓扑排序
题目描述 已知有向图,顶点从0开始编号,求它的求拓扑有序序列。 拓扑排序算法:给出有向图邻接矩阵 1.逐列扫描矩阵,找出入度为0且编号最小的顶点v 2.输出v,并标识v已访问 3.把矩阵第v行全清0 重复上述步骤࿰…...
网络安全防范
网络安全防范技术 所属课程网络攻防实践作业要求第六次作业 实践内容 学习总结 PDR,$$P^2$$DR安全模型。 防火墙(Firewall): 网络访问控制机制,布置在网际间通信的唯一通道上。 不足:无法防护内部威胁&…...
Linux nc 命令详解
简介 nc 全称 netcat,是一个在 Linux 中多功能的网络工具,通常用于通过 TCP 或 UDP 读取和写入网络连接,也能作为客户端或服务端用来 debug,测试,网络问题分析。 常用示例 检查端口是否是打开的 nc -zv <hostna…...
解决 Gradle 报错:`Plugin with id ‘maven‘ not found` 在 SDK 开发中的问题
在 SDK 开发过程中,使用 Gradle 构建和发布 SDK 是常见的任务。在将 SDK 发布为 AAR 或 JAR 包时,你可能会使用 apply plugin: maven 来发布到本地或远程的 Maven 仓库。但是,随着 Gradle 版本的更新,特别是从 Gradle 7 版本开始&…...
stm32cubemx+VSCODE+GCC+makefile 开发环境搭建
title: stm32cubemxVSCODEGCCmakefile 开发环境搭建 tags: FreertosHalstm32cubeMx 文章目录 内容往期内容导航第一步准备环境vscode 插件插件配置点灯 内容 往期内容导航 第一步准备环境 STM32CubeMXVSCODEMinGWOpenOcdarm-none-eabi-gcc 然后把上面下载的软件 3 4 5 bin 文…...
postgresql|数据库开发|python的psycopg2库按指定顺序批量执行SQL文件(可离线化部署)
一、 psycopg2简介 psycopg2库是python的一个可直接操作postgresql数据库的类库,是一个用于Python编程语言的PostgreSQL数据库适配器。它允许开发人员使用Python语言与PostgreSQL数据库进行交互和操作,不同于java,需要专用的一个驱动&#…...
学习ASP.NET Core的身份认证(基于Cookie的身份认证3)
用户通过验证后调用HttpContext.SignInAsync函数将用户的身份信息保存在认证Cookie中,以便后续的请求可以验证用户的身份,该函数原型如下所示,其中properties参数的主要属性已在前篇文章中学习,本文学习scheme和principal的意义及用法。 public static …...
Java 中的 HashMap 原理详解:底层结构与实现机制
HashMap 是 Java 中最常用的数据结构之一,它以其高效的存取速度在众多应用场景中被广泛使用。理解 HashMap 的底层实现原理,对提升开发效率、优化性能以及编写高效的代码都至关重要。本文将深入探讨 HashMap 的数据结构、存储机制、解决冲突的策略、扩容…...
数据库MYSQL——表的设计
文章目录 前言三大范式:几种实体间的关系:一对一关系:一对多关系:多对多关系: 前言 之前的博客中我们讲解的是关于数据库的增删改查与约束的基本操作, 是在已经创建数据库,表之上的操作。 在实…...
CUDA补充笔记
文章目录 一、不同核函数前缀二、指定kernel要执行的线程数量三、线程需要两个内置坐标变量来唯一标识线程四、不是blocksize越大越好,上限一般是1024个blocksize 一、不同核函数前缀 二、指定kernel要执行的线程数量 总共需要线程数是: 1 * N N个线程…...
OSI七层模型和TCP/IP五层模型详细介绍
这里写目录标题 一.OSI含义二.OSI七层模型1.应用层2.表示层3.会话层4.传输层5.网络层6.数据链路层7.物理层 TCP/IP五层协议1.应用层2.运输层运行在TCP上的协议运行在UDP上的协议 3.网络层IP协议配套使用的协议 4.数据链路层 四.网络协议分层的好处 一.OSI含义 OSI即是开放式通…...
mac安装Pytest、Allure、brew
安装环境 安装pytest 命令 pip3 install pytest 安装allure 命令:brew install allure 好吧 那我们在安装allure之前 我们先安装brew 安装brew 去了官网复制了命令 还是无法下载 如果你们也和我一样可以用这个方法哦 使用国内的代码仓库来执行brew的安装脚本…...
Linux/Windows/OSX 上面应用程序重新启动运行。
1、Linux/OSX 上面重新运行程序,直接使用 execvp 函数就可以了,把main 函数传递来的 argv 二维数组(命令行参数)传进去就可以,注意不要在 fork 出来的子进程搞。 2、Windows 平台可以通过 CreateProcess 函数来创建新的…...
自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例
Kafka:分布式消息系统的核心原理与安装部署-CSDN博客 自定义 Kafka 脚本 kf-use.sh 的解析与功能与应用示例-CSDN博客 Kafka 生产者全面解析:从基础原理到高级实践-CSDN博客 Kafka 生产者优化与数据处理经验-CSDN博客 Kafka 工作流程解析:…...
Odoo :免费且开源的农牧行业ERP管理系统
文 / 开源智造Odoo亚太金牌服务 引言 提供农牧企业数字化、智能化、无人化产品服务及全产业链高度协同的一体化解决方案,提升企业智慧种养、成本领先、产业互联的核心竞争力。 行业典型痛点 一、成本管理粗放,效率低、管控弱 产品研发过程缺少体系化…...
AI的自我陷阱:大型神经网络训练中的模型崩溃现象
10月7日,发布在arxiv上的一篇名为Strong Model Collapse的论文,由Meta 、纽约大学和加州大学洛杉矶分校的研究人员共同发表的研究表明在训练大型神经网络(如 ChatGPT 和 Llama)时,由于训练语料库中包含合成数据而导致的…...
Python(下载安装)
简介 开发工具:pycharm, VS Code 1. 下载(解释器程序) Download Python | Python.org 2. 安装(解释器程序) 双击下载后的exe文件 查看版本:python(并可以执行python代码) 3. 下载…...
记录一种在内核空间向用户空间通知中断的方法
记录一种在内核空间向用户空间通知中断的方法 0.前言1.代码实现1)内核设备驱动实现2)消息通知实现3)测试程序 2.解析 参考文章:Linux驱动实践:中断处理函数如何【发送信号】给应用层? 0.前言 最近在项目中遇到一个需求,需要将一个…...
Apache Maven 标准文件目录布局
Apache Maven 采用了一套标准的目录布局来组织项目文件。这种布局提供了一种结构化和一致的方式来管理项目资源,使得开发者更容易导航和维护项目。理解和使用标准目录布局对于有效的Maven项目管理至关重要。本文将探讨Maven标准目录布局的关键组成部分,并…...
【vim】使用 gn 组合命令实现搜索选中功能
gn是Vim 7.4新增的一个操作(motion),作用是跳到并选中下一个搜索匹配项。 具体说,Vim里执行搜索后,执行n操作只会跳转到下一个匹配项,而不选中它。但是我们往往需要对匹配项执行一些修改操作,例…...
解决登录Google账号遇到手机上Google账号无法验证的问题
文章目录 场景小插曲解决方案总结 场景 Google账号在新的设备上登录的时候,会要求在手机的Google上进行确认验证,而如果没有安装Google play就可能出现像我一样没有任何弹框,无法实现验证 小插曲 去年,我在笔记本上登录了Googl…...
基于YOLOv10深度学习的公共安全持刀行为检测系统研究与实现(PyQt5界面+数据集+训练代码)
随着社会的不断进步和城市化进程的加快,人口密度的增加和社会结构的复杂化使得公共安全问题日益凸显。近年来,各类公共安全事件频发,其中持刀行为作为一种典型的暴力行为,已成为威胁公共安全的严重因素之一。这种行为在公共场所发…...
HP6心率血压传感器
目录 一、介绍 1、工作原理概述 2、具体实现步骤 二、HP6的通信及配置 1、通信接口 2、器件地址/命令 3、校验 三、程序设计 ①IIC通信相关基础函数 ②HP6相关基础函数 一、介绍 HP6心率血压传感器的原理主要基于光电容积脉搏波描记法(PPG)&…...