当前位置: 首页 > news >正文

蓝桥杯刷题 Day1 高精度加法

蓝桥杯刷题 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主函数

public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);

        String A = scanner.next();
        String B = scanner.next();

        // 去除前导o
        A = deleteZeros(A);
        B = deleteZeros(B);

        // 两个大数相加
        String result = addNum(A,B);

        //输出
        System.out.println(result);
    }

2.2 去除前导0

 // 去除前导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 大数相加

 // 大数相加
    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进1
            carry = sum / 10;
        }

2.4 完整代码

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();

        // 去除前导o
        A = 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进1
            carry = 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. 代码

相关文章:

  • 基于SpringBoot + Vue 的校园论坛系统
  • 记第一次跟踪seatunnel的任务运行过程四——getJobConfigParser().parse()的动作
  • java每日精进 3.12 【WebSocket进阶】
  • LabVIEW正弦信号三参数最小二乘拟合
  • sensor数据在整个rk平台的框架流程是怎么样,
  • Maven 构建 项目测试
  • 前端PayPal支付按钮集成(Vue3)
  • AI + 游戏开发:如何用 DeepSeek 打造高性能开心消消乐游戏
  • React篇之three渲染
  • MB90540/540G/545/545G Series
  • 锤头线和倒锤头线
  • OpenHarmony 5.0 拨号键盘自定义暗码启动其他应用
  • Linux常见问题与分析
  • OBJ文件生成PCD文件(python 实现)
  • MTK Android12 安装app添加密码锁限制
  • Android Framwork 之深入理解 IPC Binder机制
  • vue2安装scss
  • C语言实现十六进制转十进制
  • 谷歌 DeepMind 重磅出击,多款 AI 模型震撼登场
  • 【A2DP】蓝牙音频编解码器互操作性要求详解
  • 上海企业网站建设哪家好/八爪鱼磁力搜索引擎
  • wordpress管理地址/网站的优化
  • 个人业务网站教程/企业软文怎么写
  • 棋牌游戏网站模板下载/东莞seo推广公司
  • 怎样做自己的微商网站/视频剪辑培训
  • 2015网站设计趋势/好看的网站设计