蓝桥杯刷题 Day1 高精度加法

ops/2025/3/14 7:45:22/

蓝桥杯刷题 Day1


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 蓝桥杯刷题 Day1
  • 前言
  • 一、大数加法
    • 1. 解题思路
    • 2. 代码
      • 2.1主函数
      • 2.2 去除前导0
      • 2.3 大数相加
      • 2.4 完整代码
  • 二、KMP字符串匹配
    • 0. 知识点速记
    • 1. 解题思路
    • 2. 代码


前言

今天写牛客网模板题中的字符串模块


一、大数加法

原题地址: 高精度加法

1. 解题思路

  1. 去除前导零:首先需要处理输入的字符串,去掉前导零。例如,输入可能是“00123”,我们需要将其转换为“123”。
  2. 从右向左逐位相加:由于数字非常大,我们不能直接将其转换为整数进行计算。因此,我们将数字按字符逐位处理,从最低位(即字符串的末尾)开始相加。
  3. 处理进位:每一步相加后可能会产生进位,需要将进位传递到下一位的计算中。
  4. 构建结果字符串:将每一位的计算结果拼接到一个字符串中,并在最后反转得到正确的顺序。

2. 代码

2.1主函数

java">public static void main(String[] args){Scanner scanner = new Scanner(System.in);String A = scanner.next();String B = scanner.next();// 去除前导oA = deleteZeros(A);B = deleteZeros(B);// 两个大数相加String result = addNum(A,B);//输出System.out.println(result);}

2.2 去除前导0

java"> // 去除前导0,处理全为0的情况public static String deleteZeros(String num){int i = 0;while(i < num.length() && num.charAt(i) == '0'){i++;}if(i == num.length()){return "0";}return num.substring(i);// 提取字符,[i,num末尾)}

2.3 大数相加

java"> // 大数相加public static String addNum(String A, String B){// StringBuilder修改字符串本身StringBuilder sb = new StringBuilder();// 索引int i = A.length() - 1;int j = B.length() - 1;// 进位int carry = 0;while(i >= 0 || j >= 0 || carry > 0){int sum = carry;if(i >= 0){// -'0' 将字符串转化成整数sum += A.charAt(i) - '0';i--;}if(j >= 0){sum += B.charAt(j) - '0';j--;}// 当前位sb.append(sum % 10);// 10进1carry = sum / 10;}

2.4 完整代码

java">import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scanner = new Scanner(System.in);String A = scanner.next();String B = scanner.next();// 去除前导oA = deleteZeros(A);B = deleteZeros(B);// 两个大数相加String result = addNum(A,B);//输出System.out.println(result);}// 去除前导0,处理全为0的情况public static String deleteZeros(String num){int i = 0;while(i < num.length() && num.charAt(i) == '0'){i++;}if(i == num.length()){return "0";}return num.substring(i);// 提取字符,[i,num末尾)}// 大数相加public static String addNum(String A, String B){// StringBuilder修改字符串本身StringBuilder sb = new StringBuilder();// 索引int i = A.length() - 1;int j = B.length() - 1;// 进位int carry = 0;while(i >= 0 || j >= 0 || carry > 0){int sum = carry;if(i >= 0){// -'0' 将字符串转化成整数sum += A.charAt(i) - '0';i--;}if(j >= 0){sum += B.charAt(j) - '0';j--;}// 当前位sb.append(sum % 10);// 10进1carry = sum / 10;}// sb.reverse()字符串本身反转,toString()转换为Sring对象(新对象)String result = sb.reverse().toString();return result;}
}

二、KMP字符串匹配

原题地址: KMP字符串匹配

0. 知识点速记

  1. KMP算法:用于匹配字符串,可以智能地跳到某个位置匹配,避免穷举查找
  2. 跳转规则:next数组

1. 解题思路

  1. 去除前导零:首先需要处理输入的字符串,去掉前导零。例如,输入可能是“00123”,我们需要将其转换为“123”。
  2. 从右向左逐位相加:由于数字非常大,我们不能直接将其转换为整数进行计算。因此,我们将数字按字符逐位处理,从最低位(即字符串的末尾)开始相加。
  3. 处理进位:每一步相加后可能会产生进位,需要将进位传递到下一位的计算中。
  4. 构建结果字符串:将每一位的计算结果拼接到一个字符串中,并在最后反转得到正确的顺序。

2. 代码


http://www.ppmy.cn/ops/165609.html

相关文章

RocketMQ常见问题总结

消息队列扫盲 消息队列顾名思义就是存放消息的队列&#xff0c;队列我就不解释了&#xff0c;别告诉我你连队列都不知道是啥吧&#xff1f; 所以问题并不是消息队列是什么&#xff0c;而是 消息队列为什么会出现&#xff1f;消息队列能用来干什么&#xff1f;用它来干这些事会…

接口测试笔记

4、接口测试自动化 接口自动化概述 HttpClient HttpClient开发过程 创建Java工程 新建libs库目录 HttpClient 工具下载及引入 https://hc.apache.org/index.html工程中引入jar包 Get请求 HttpGet方法---发起Get请求 创建HttpClient对象 CloseableHttpClient httpclient …

mysql select distinct 和 group by 哪个效率高

在有索引的情况下&#xff0c;SELECT DISTINCT和GROUP BY的效率相同&#xff1b;在没有索引的情况下&#xff0c;SELECT DISTINCT的效率高于GROUP BY‌。这是因为SELECT DISTINCT和GROUP BY都会进行分组操作&#xff0c;但GROUP BY可能会进行排序&#xff0c;触发filesort&…

Python之变量及简单的数据类型

本文来源于《Python从入门到实践》&#xff0c;自己整理以供工作参考 基本内容 print("Hello Python World!")message "Hello Python world!" print(message)message "Helllo Python Crash Course world!" print(message)name "ada lov…

Vue组件通信

Vue组件通信 Vue组件放在components目录&#xff1a; 1、组件是对于HTML标签的扩展 2、以.vue结尾的文件都是叫做组件 APP.vue叫做根组件 TODO: 组件的文件名字的首字母大写 组件的引入 import Xxx from ./components/Xxx.vue App.vue: <script> import Swiper1 …

Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主机名

进入目录 /etc/netplan 修改 50-cloud-init.yaml 》保存文件后&#xff0c;执行以下命令应用更改&#xff1a; sudo netplan apply 》》 DHCP模式 修改主机名 hostnamectl set-hostname xxxx 修改cloud.cfg 防止重启主机名还原 但测试下来 不修改&#xff0c; 重启 也不会还…

JAVA中的多线程安全问题及解决方案

一.线程安全的定义 线程安全是指在多线程环境下&#xff0c;对共享资源进行并发访问时&#xff0c;程序能够正确地处理&#xff0c;不会出现数据不一致、逻辑错误等问题&#xff0c;确保程序的执行结果与单线程环境下的执行结果相同&#xff0c;或者符合预期的并发逻辑。 有些代…

Node.js 模块化概念详细介绍

目录 模块化的概念 模块化的好处&#xff1a; 实现模块化 代码实现 1. 创建计算器模块 2. 使用计算器模块 3. 运行结果 总结 常见的Node.js核心模块 模块化的应用场景 Node.js 采用了模块化的设计&#xff0c;使得开发者能够将代码拆分成多个独立的模块&#xff0c;便…