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

蓝桥杯高频考点——高精度(含C++源码)

前言

前两天考完了csp认证,总的来说还算正常发挥 休息了两天给大家更一个蓝桥杯

这个高精度是啥东西 说白了就是我们一般的数据类型存储不了的数字进行运算
具体来说就是10…(此处省略500个0),即便是强如 long long 也是存不下的

那么解决办法是啥?不算了?
显然不是 我们可以模拟小学学到竖式来计算 我们来分别来具体看加减乘除

我这里用例题来呈现
具体的讲解视频我附在这里 讲的真的太好了 我感觉就算一点没学过算法也能听明白

高精度系列视频

高精度加法

例题

思路及代码

solution 1(初阶版 40分)

在这里插入图片描述

我的注释写的非常详细了 但是由于我没有对特殊情况做出处理导致才过了2个样例
这里样例比较少 但是大部分情况下代码是没问题的

#include <bits/stdc++.h>
using namespace std;
int main()
{string s1,s2;//对于string类型会自动初始化为空字符串//对于数组来说如果不对他初始化 他会是一个随机值int a1[110], a2[110], a3[110]={0};//最长是500位加上500位 结果最多是一个501位数 所以大小我们定义510肯定够了 a1 a2 a3分别保存逆序存放的数字和结果 //读入我们输入的数字存进字符串里面cin>>s1;cin>>s2;//将读入的数字逆序存放在数组里面//例如我们将123的1存到数组里面 它的位置就是//a1[s1.size()-1-0] for(int i=0;i<s1.size();i++){a1[s1.size()-i-1]=s1[i]-'0';//-i是因为倒序  -1是因为数组下标从0开始;}for(int i=0;i<s2.size();i++){a2[s2.size()-i-1]=s2[i]-'0';}//求出循环次数也就是我们模拟竖式相加的次数 而在加法中这个是由较大的数来决定的 这里不用考虑负数也就是字符串较长的数字int len=s1.size();if(s2.size()>s1.size()){len=s2.size();}//相加操作for(int i=0;i<len;i++){a3[i]=a1[i]+a2[i];}//满10进位for(int i=0;i<len;i++){if(a3[i]>10){a3[i+1]+=a3[i]/10;a3[i]=a3[i]%10;}}//逆序输出//因为我们一开始将数组置为0 所以我们只需要找到第一个不为0的点//就可以找到逆序输出的起点if(a3[len]!=0)//判断一下最高位置是不是0{len++;}for(int i=len-1;i>=0;i--){cout<<a3[i];}
}

solution 2(完全体 AC)

首先优化的点在于将上面代码中的对应相加和进位操作放在了一个循环里面

第二个就是比较重要的点 就是如果结果是0 我们需要只输出一个0 也就是说去掉前序位置上的所有0

#include <bits/stdc++.h>
using namespace std;int main() {std::ios::sync_with_stdio(false); // 提高输入输出效率std::cin.tie(NULL);string s1, s2;cin >> s1 >> s2;int a1[510] = {0}, a2[510] = {0}, a3[510] = {0};// 将字符串逆序存入数组for(int i = 0; i < s1.size(); i++) {a1[s1.size() - i - 1] = s1[i] - '0';}for(int i = 0; i < s2.size(); i++) {a2[s2.size() - i - 1] = s2[i] - '0';}// 求出最大长度int len = max(s1.size(), s2.size());// 相加并处理进位int carry = 0;for(int i = 0; i < len || carry; i++) {if(i < len) a3[i] += a1[i] + a2[i];if(a3[i] >= 10) {carry = a3[i] / 10;a3[i] %= 10;a3[i+1] += carry;} else {carry = 0;}}// 输出结果int start = len;while(start >= 0 && a3[start] == 0) start--;if(start == -1) cout << "0"; // 特殊情况:结果为0else {for(int i = start; i >= 0; i--) {cout << a3[i];}}return 0;
}

高精度乘法

例题

在这里插入图片描述
题目链接

思路及代码

solution 1(TLE 但是代码很清晰)


#include <bits/stdc++.h>
using namespace std;
//首先这是一道高精度乘法(而且是高精度乘以高精度)
//我们需要用其中一个数的每一位去乘以另外一个高精度数
//大体上的思路就是用两层循环来实现 内层循环a1外层循环a2
int main()
{//string s1=""可以不初始化 string类型默认初始化为空字符串string s1,s2;int a1[2010],a2[2010],a3[4020]={0};getline(cin,s1);getline(cin,s2);//逆序存放在数组当中for(int i=0;i<s1.size();i++){a1[i]=s1[s1.size()-i-1]-'0';}for(int j=0;j<s2.size();j++){a2[j]=s2[s2.size()-j-1]-'0';}for(int i=0;i<s2.size();i++){for(int j=0;j<s1.size();j++){//第一次a3[j+0]=a3[j+0]+a1[j]*a2[i]//第二次a3[j+1]=a3[j+1]+a1[j]*a2[i]//通过找规律我们可以知道我们每一轮的变化就是a3[j+i]=a3[j+i]+a1[j]*a2[i];//进位判断if(a3[j+i]>10){a3[j+i+1]+=a3[j+i]/10;//看看能进几a3[j+i]=a3[j+i]%10;}}}//完成相乘操作之后 我们就需要逆序输出一下a3//首先我们需要明确的就是一个200✖️200的结果不会超过400位数///也就是这两个长度之和int index=0;for(int i=s1.size()+s2.size();i>=0;i--){if(a3[i]!=0){index=i;//找到了起始下标break;}}for(int i=index;i>=0;i--){cout<<a3[i];}return 0;}

solution 1的问题


  1. 算法复杂度问题
  • 当前复杂度:你的代码使用了两层嵌套循环来实现高精度乘法,外层循环遍历 s2 的每一位,内层循环遍历 s1 的每一位。假设 s1s2 的长度分别为 mn,那么时间复杂度为 O(m × n)
  • 问题点:如果输入的字符串长度较大(例如接近 2000),则计算量会非常大,导致超时。

  1. 进位逻辑效率问题
  • 当前实现:在每次相乘后立即进行进位操作:

    if(a3[j+i] > 10) {a3[j+i+1] += a3[j+i] / 10;a3[j+i] = a3[j+i] % 10;
    }
    

    这种方式会在每次相乘后都检查是否需要进位,增加了不必要的开销。

  • 优化方法:可以先完成所有乘法操作,最后统一处理进位。这样可以减少重复的进位判断。


  1. 输出部分的效率问题
  • 当前实现

    for(int i = s1.size() + s2.size(); i >= 0; i--) {if(a3[i] != 0) {index = i; // 找到起始下标break;}
    }
    for(int i = index; i >= 0; i--) {cout << a3[i];
    }
    

    使用了两个循环来找到第一个非零位并逆序输出结果。

  • 优化方法:可以通过一次循环完成查找和输出,减少冗余操作。


  1. 输入方式的问题
  • 当前实现

    getline(cin, s1);
    getline(cin, s2);
    

    使用 getline 读取输入字符串,虽然功能正确,但在某些评测环境中可能会比 cin 稍慢。

  • 优化方法:如果输入不包含空格,可以直接使用 cin 提高效率。


solution 2(优化 AC)

#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false); // 不用管就是 提高输入输出效率cin.tie(NULL);string s1, s2;cin >> s1 >> s2; // 使用 cin 提高效率int a1[2010] = {0}, a2[2010] = {0}, a3[4020] = {0};// 将字符串逆序存入数组for(int i = 0; i < s1.size(); i++) {a1[i] = s1[s1.size() - i - 1] - '0';}for(int i = 0; i < s2.size(); i++) {a2[i] = s2[s2.size() - i - 1] - '0';}// 高精度乘法for(int i = 0; i < s2.size(); i++) {for(int j = 0; j < s1.size(); j++) {a3[i + j] += a1[j] * a2[i]; // 先累加结果}}// 统一处理进位for(int i = 0; i < s1.size() + s2.size(); i++) {if(a3[i] >= 10) {a3[i + 1] += a3[i] / 10;a3[i] %= 10;}}// 输出结果int start = s1.size() + s2.size();while(start > 0 && a3[start] == 0) start--; // 去掉前导零if(start == -1) cout << "0"; // 特殊情况:结果为0else {for(int i = start; i >= 0; i--) {cout << a3[i];}}return 0;
}

高精度减法

例题

在这里插入图片描述

题目链接

代码及思路

solution 1 (90分)

应该是对于结果正好为0的时候没有特判 补一下

#include <bits/stdc++.h>
using namespace std;
int main()
{string s1,s2;cin>>s1;cin>>s2;int a1[10100],a2[10100],a3[10100]={0};char flag ='+';//保证始终都是位数长的减去小的//比如现在让你求10-200 我们可以算200-10 然后在结果前面加上负号//如果这个flag是正的则不需要输出if(s1.size()<s2.size()||(s1.size()==s2.size()&& s1<s2)){swap(s1,s2);flag='-';}//逆序存储for(int i=0;i<=s1.size();i++){a1[s1.size()-i-1]=s1[i]-'0';}for(int i=0;i<=s2.size();i++){a2[s2.size()-i-1]=s2[i]-'0';}for(int i=0;i<s1.size();i++){//先借好位if(a1[i]<a2[i])//需要借位的情况{a1[i]+=10;a1[i+1]--;}//再对应相减a3[i]=a1[i]-a2[i];}if(flag=='-'){cout<<flag;}int index=0;//找到倒序输出的起始位置for(int i=s1.size()-1;i>=0;i--){if(a3[i]!=0){index=i;break;}}for(int i=index;i>=0;i--){cout<<a3[i];}return 0;
}

问题


  1. 数组越界问题
  • 问题点

    for(int i=0;i<=s1.size();i++) {a1[s1.size()-i-1]=s1[i]-'0';
    }
    

    这里的循环条件是 i <= s1.size(),但字符串的索引范围是 [0, s1.size()-1],因此当 i == s1.size() 时会导致数组越界。

  • 修复方法:将循环条件改为 i < s1.size()


  1. 借位逻辑错误
  • 问题点

    if(a1[i] < a2[i]) {a1[i] += 10;a1[i+1]--;
    }
    

    如果 a1[i+1] 已经为 0,则再次借位会导致负值,从而产生错误结果。

  • 修复方法:在借位时确保高位有足够值可以借。可以通过递归借位的方式解决:

    if(a1[i] < a2[i]) {int j = i;while(j < s1.size() && a1[j+1] == 0) {a1[j+1] = 9; // 借位后恢复为9j++;}if(j < s1.size()) {a1[j+1]--;a1[i] += 10;}
    }
    

  1. 前导零问题
  • 问题点

    for(int i=s1.size()-1;i>=0;i--) {if(a3[i] != 0) {index = i;break;}
    }
    

    如果结果为 0(例如 1 - 1),则 index 会保持初始值 0,导致输出多余字符。

  • 修复方法:在输出前检查是否所有位均为 0,并直接输出 0

    bool all_zero = true;
    for(int i=0;i<s1.size();i++) {if(a3[i] != 0) {all_zero = false;break;}
    }
    if(all_zero) {cout << "0";return 0;
    }
    

  1. 符号处理问题
  • 问题点:如果两个数相等(例如 1 - 1),当前代码会输出 -0,这是不正确的。
  • 修复方法:在输出符号前检查结果是否为 0:
    if(flag == '-') {bool all_zero = true;for(int i=0;i<s1.size();i++) {if(a3[i] != 0) {all_zero = false;break;}}if(!all_zero) {cout << flag;}
    }
    

solution 2

#include <bits/stdc++.h>
using namespace std;int main() {string s1, s2;cin >> s1 >> s2;int a1[10100] = {0}, a2[10100] = {0}, a3[10100] = {0};char flag = '+';// 保证始终都是位数长的减去小的if(s1.size() < s2.size() || (s1.size() == s2.size() && s1 < s2)) {swap(s1, s2);flag = '-';}// 逆序存储for(int i = 0; i < s1.size(); i++) {a1[s1.size() - i - 1] = s1[i] - '0';}for(int i = 0; i < s2.size(); i++) {a2[s2.size() - i - 1] = s2[i] - '0';}// 高精度减法for(int i = 0; i < s1.size(); i++) {if(a1[i] < a2[i]) { // 需要借位的情况int j = i;while(j < s1.size() && a1[j+1] == 0) {a1[j+1] = 9; // 借位后恢复为9j++;}if(j < s1.size()) {a1[j+1]--;a1[i] += 10;}}a3[i] = a1[i] - a2[i];}// 检查是否所有位均为0bool all_zero = true;for(int i = 0; i < s1.size(); i++) {if(a3[i] != 0) {all_zero = false;break;}}if(all_zero) {cout << "0";return 0;}// 输出符号if(flag == '-') {bool has_non_zero = false;for(int i = 0; i < s1.size(); i++) {if(a3[i] != 0) {has_non_zero = true;break;}}if(has_non_zero) {cout << flag;}}// 找到倒序输出的起始位置int index = 0;for(int i = s1.size() - 1; i >= 0; i--) {if(a3[i] != 0) {index = i;break;}}// 输出结果for(int i = index; i >= 0; i--) {cout << a3[i];}return 0;
}

相关文章:

蓝桥杯高频考点——高精度(含C++源码)

高精度 前言高精度加法例题思路及代码solution 1&#xff08;初阶版 40分&#xff09;solution 2&#xff08;完全体 AC&#xff09; 高精度乘法例题思路及代码solution 1&#xff08;TLE 但是代码很清晰&#xff09;solution 1的问题solution 2&#xff08;优化 AC&#xff09…...

程序化广告行业(52/89):程序化创意深度剖析

程序化广告行业&#xff08;52/89&#xff09;&#xff1a;程序化创意深度剖析 大家好&#xff01;我一直对程序化广告领域充满热情&#xff0c;在学习过程中发现其中有很多有趣又实用的知识。今天写这篇博客&#xff0c;就是希望能和大家一起学习进步&#xff0c;深入探索程序…...

selenium和pytessarct提取古诗文网的验证码(python爬虫)

代码实现的主要功能&#xff1a; 浏览器自动化控制 验证码图像获取与处理 OCR验证码识别 表单自动填写与提交 登录状态验证 异常处理与资源清理 1. 浏览器初始化与页面加载 driver webdriver.Chrome() driver.get("https://www.gushiwen.cn/user/login.aspx?fro…...

封装可拖动弹窗(vue jquery引入到html的版本)

vue cli上简单的功能&#xff0c;在js上太难弄了&#xff0c;这个弹窗功能时常用到&#xff0c;保存起来备用吧 备注&#xff1a;deepseek这个人工智障写一堆有问题的我&#xff0c;还老服务器繁忙 效果图&#xff1a; html代码&#xff1a; <div class"modal-mask&qu…...

JavaScript重难点突破:期约与异步函数

同步和异步 ​同步&#xff08;Synchronous&#xff09;​ ​定义&#xff1a;任务按顺序依次执行&#xff0c;前一个任务完成前&#xff0c;后续任务必须等待。 ​特点&#xff1a;阻塞性执行&#xff0c;程序逻辑直观&#xff0c;但效率较低 ​异步&#xff08;Asynchron…...

Spring事务的传播机制

目录 Spring 中事务的实现编程式事务(了解即可)&#xff1a;声明式事务(利用注解自动开启和提交事务)&#xff1a;事务回滚注意事项&#xff1a; Spring 事务传播机制&#xff1a;1.Propagation.REQUIRED&#xff1a;7.Propagation.NESTED&#xff1a;Propagation.NESTED和1.Pr…...

LlamaIndex实现RAG增强:融合检索(Fusion Retrieval)与混合检索(Hybrid Search)

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

什么是向量搜索Vector Search?

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题

处理网络请求时&#xff0c;我们经常会遇到需要中途取消请求的情况&#xff0c;比如用户在两个tab之间反复横跳的场景&#xff0c;如果每个接口都从头请求到结束&#xff0c;那必然会造成很大的服务压力。 AbortController是一个Web API&#xff0c;它提供了一个信号对象&…...

GitHub与Gitee各是什么?它们的区别与联系是什么?

李升伟 整理 GitHub 介绍 GitHub 是一个基于 Git 的代码托管平台&#xff0c;主要用于版本控制和协作开发。它支持多人协作&#xff0c;提供代码托管、问题跟踪、代码审查、项目管理等功能。GitHub 是全球最大的开源社区&#xff0c;许多知名开源项目都在此托管。 主要功能&…...

OpenCV图像形态学:原理、操作与应用详解

一、引言 图像形态学&#xff08;Image Morphology&#xff09;是图像处理领域的一个重要分支&#xff0c;它基于集合论、格论、拓扑学和随机函数理论&#xff0c;主要用于分析和处理图像的几何结构。形态学操作通过特定的结构元素&#xff08;Structuring Element&#xff09;…...

ubuntu git cola gui

直接的方法&#xff0c; samba&#xff0c; win 里用 tortoiseSVN 需要先在命令行&#xff0c;运行 git 命令&#xff0c;看到操作提示&#xff0c; 按照提示做 然后右键看 git diff 其它的方法 linux下可视化git工具git-cola安装与使用&#xff08;HTTP方式&#xff09;_git…...

RTX5080 安装torch,torchvision ,torchaudio 指南

一、前置准备 5080 显卡 是sm120 架构&#xff0c;只有torch的preview版本可以使用&#xff0c;而且该版本仅支持cuda12.8. 请你放弃下载以及使用低版本cuda cudnn torch 的想法。 请你学习conda 创建环境&#xff0c;激活环境&#xff0c;在虚拟环境里使用pip &#xff0c;…...

ubuntu开发mcu环境

# 编辑 vim或者vscode # 编译 arm-none-eabi # 烧写 openocd 若是默认安装&#xff0c;会在/usr/share/openocd/scripts/{interface,target} 有配置接口和目标版配置 示例&#xff1a; openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg 启动后&#xff0c;会…...

《UNIX网络编程卷1:套接字联网API》第5章 TCP客户服务器程序示例

《UNIX网络编程卷1&#xff1a;套接字联网API》第5章 TCP客户/服务器程序示例 5.1 本章目标与示例程序概述 本章通过一个完整的TCP回射&#xff08;Echo&#xff09;客户/服务器程序&#xff0c;深入解析TCP套接字编程的核心流程与关键问题。示例程序的功能为&#xff1a;客户…...

花洒洗澡完毕并关闭后过段时间会突然滴水的原因探究

洗澡完毕后的残留水 在洗澡的过程中&#xff0c;我们通常会使用到大量的水。这些水会通过花洒管子到达花洒顶喷流出。由于大顶喷花洒的喷头较大&#xff0c;关闭后里面的存水会更多。 气压失衡后的滴水 当花洒关闭后&#xff0c;内部的水管和花洒头中仍存有一定量的水。由于…...

子组件使用:visible.sync=“visible“进行双向的绑定导致该弹窗与其他弹窗同时显示的问题

问题描述&#xff1a;最近写代码时遇到了一个问题&#xff1a;点击A弹窗后关闭&#xff0c;继续点击B弹窗&#xff0c;这时会同时弹窗A、B两个弹窗。经过排查后发现在子组件定义时使用了:visible.sync"visible"属性进行双向的数据绑定 <template> <el-dial…...

TTL 值 | 在 IP 协议、ping 工具及 DNS 解析中的作用

注&#xff1a;本文为 “TTL” 相关文章合辑。 未整理去重。 如有内容异常&#xff0c;请看原文。 TTL 值的意义 2007-10-18 11:33:17 TTL 是 IP 协议包中的一个值&#xff0c;用于标识网络路由器是否应丢弃在网络中停留时间过长的数据包。数据包可能因多种原因在一定时间内…...

代码调试:VS调试实操

1.什么是BUG&#xff1f; BUG原意是“虫子”&#xff0c;在计算机领域是指未被发现的错误&#xff0c;又叫程序漏洞 2.什么是调试&#xff1f; 当你在写完代码时需要去找代码中的问题&#xff0c;这个过程就叫调试 我们必须承认有这个问题并且去修复问题&#xff0c;可以透…...

IGMP(Internet Group Management Protocol)与组播技术深度解析

一、组播技术核心概念 1. 组播 vs 单播/广播 传输类型目标地址网络负载典型应用场景单播单一明确IP随接收者数量线性增长网页浏览、文件下载广播全网段&#xff08;如255.255.255.255&#xff09;强制全网设备处理ARP请求、DHCP发现组播D类地址&#xff08;224.0.0.0~239.255…...

JWT(JSON Web Token)

目录 一 JWT简单介绍 二、JWT 的组成结构 1 Header&#xff08;头部&#xff09; 2 Payload&#xff08;载荷&#xff09; 三、JWT 工作原理 好文分享 session、cookie、token 详解_token session cookie-CSDN博客 一 JWT简单介绍 概念&#xff1a;是一种开放标准&#…...

深入理解多线程编程:从基础概念到实战应用

二进制信号量&#xff1a;线程同步的基础 什么是二进制信号量&#xff1f; 二进制信号量是一种特殊的信号量&#xff0c;其值只能是0或1。它是最简单的线程同步机制之一&#xff0c;常用于线程间的简单协调。 #include <semaphore.h>sem_t sem; // 声明二进制信号量 se…...

【STM32设计】基于STM32的智能门禁管理系统(指纹+密码+刷卡+蜂鸣器报警)(代码+资料+论文)

本课题为基于单片机的智能门禁系统&#xff0c;整个系统由AS608指纹识别模块&#xff0c;矩阵键盘&#xff0c;STM32F103单片机&#xff0c;OLED液晶&#xff0c;RFID识别模块&#xff0c;继电器&#xff0c;蜂鸣器等构成&#xff0c;在使用时&#xff0c;用户可以录入新的指纹…...

【MVP 和 MVVM 相比 MVC 有哪些优化点?】

MVP 和 MVVM 相比 MVC 的优化及原因 1. MVC 的痛点 在传统 MVC 模式中&#xff1a; 视图&#xff08;View&#xff09;和模型&#xff08;Model&#xff09;直接交互&#xff1a;View 可能直接监听 Model 的变化&#xff08;如观察者模式&#xff09;&#xff0c;导致耦合。…...

蓝桥云客 刷题统计

刷题统计 问题描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题&#xff1f; 输入格式 输入一行包含三个整数 a, b 和 …...

【28BYJ-48】STM32同时驱动4个步进电机,支持调速与正反转

资料下载&#xff1a;待更新。。。。 先驱动起来再说&#xff0c;干中学&#xff01;&#xff01;&#xff01; 1、实现功能 STM32同时驱动4个步进电机&#xff0c;支持单独调速与正反转控制 需要资源&#xff1a;16个任意IO口1ms定时器中断 目录 资料下载&#xff1a;待更…...

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程(持续更新)

【第十三届“泰迪杯”数据挖掘挑战赛】【2025泰迪杯】【代码篇】A题解题全流程&#xff08;持续更新&#xff09; 环境配置&#xff1a; 显存>24GBPyTorch 2.3.0Python 3.12(ubuntu22.04)CUDA 12.1autoDL服务器平台&#xff0c;&#xff08;好处&#xff1a;可以分享镜像&…...

迅为RK3568开发板驱动开发指南helloworld驱动实验-驱动的基本框架

Linux 驱动的基本框架主要由模块加载函数&#xff0c;模块卸载函数&#xff0c;模块许可证声明&#xff0c;模块参数&#xff0c;块导出符号&#xff0c;模块作者信息等几部分组成&#xff0c;其中模块参数&#xff0c;模块导出符号&#xff0c;模块作者信息是选的部分&#xf…...

Spring Boot 3.4.3 基于 JSqlParser 和 MyBatis 实现自定义数据权限

前言 在企业级应用中,数据权限控制是保证数据安全的重要环节。本文将详细介绍如何在 Spring Boot 3.4.3 项目中结合 JSqlParser 和 MyBatis 实现灵活的数据权限控制,通过动态 SQL 改写实现多租户、部门隔离等常见数据权限需求。 一、环境准备 确保开发环境满足以下要求: …...

软件工程面试题(二十三)

1、public class Test {public static void add(Integer i){int val=i.intValue(); val+=3; i=new Integer(val); } public static void main(String[] args) {Integer i=new Integer(0); add(i); System.out.println(i.intValue());...

spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结

对比详解 1. RedisTemplate 功能&#xff1a;Spring Data Redis的核心模板类&#xff0c;提供对Redis的通用操作&#xff08;如字符串、哈希、列表、集合等&#xff09;。使用场景&#xff1a;常规的Redis增删改查操作。特点&#xff1a; 支持序列化配置&#xff08;如String…...

leetcode-热题100(3)

leetcode-74-搜索二维矩阵 矩阵最后一列升序排序&#xff0c;在最后一列中查找第一个大于等于target的元素 然后在该元素所在行进行二分查找 bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target) {int n matrixSize;int m matrixColSize[0];in…...

【大模型系列篇】大模型基建工程:使用 FastAPI 构建 SSE MCP 服务器

今天我们将使用FastAPI来构建 MCP 服务器&#xff0c;Anthropic 推出的这个MCP 协议&#xff0c;目的是让 AI 代理和你的应用程序之间的对话变得更顺畅、更清晰。FastAPI 基于 Starlette 和 Uvicorn&#xff0c;采用异步编程模型&#xff0c;可轻松处理高并发请求&#xff0c;尤…...

基于大模型预测风湿性心脏病二尖瓣病变的多维度诊疗研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型技术概述 2.1 大模型的原理与架构 2.2 在医疗领域的应用现状 三、术前评估与预测 3.1 患者数据收集与分析 3.1.1 临床数据收集 3.1.2 影像数据处理 3.2 大模型预测模型建立 3.2.1 数据预处理 3.…...

5.模型训练-毕设篇

vgg&#xff1a; base_model_vgg13 models.vgg13(pretrainedTrue) base_model_vgg13.classifier[-1] nn.Linear(4096, num_classes) base_model_vgg13.to(device)(b_img_rgb.to(device)).shapebase_model_vgg13 models.vgg13(pretrainedTrue) 作用&#xff1a;加载预训练的…...

[物联网iot]对比WIFI、MQTT、TCP、UDP通信协议

第一步&#xff1a;先理解最基础的关系&#xff08;类比快递&#xff09; 假设你要给朋友寄快递&#xff1a; Wi-Fi&#xff1a;相当于“公路和卡车”&#xff0c;负责把包裹从你家运到快递站。 TCP/UDP&#xff1a;相当于“快递公司的运输规则”。 TCP&#xff1a;顺丰快递&…...

【含文档+PPT+源码】基于Python的股票数据可视化及推荐系统的设计与实现

项目介绍 本课程演示的是一款基于Python的股票数据可视化及推荐系统的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行…...

LeetCode算法题(Go语言实现)_23

题目 给你一个下标从 0 开始、大小为 n x n 的整数矩阵 grid &#xff0c;返回满足 Ri 行和 Cj 列相等的行列对 (Ri, Cj) 的数目。 如果行和列以相同的顺序包含相同的元素&#xff08;即相等的数组&#xff09;&#xff0c;则认为二者是相等的。 一、代码实现 func equalPairs…...

Windows家庭版如何开启Hyper-V与关闭Hyper-V

在Windows中如果要安装桌面版Docker,那么Hyper-V一定是需要开启的,在专业版操作系统上,这个功能直接就可以勾选开启,重启之后就即可生效,但在家庭版的操作系统上,默认是没有这个选择项的,这时候我们就需要借助于命令去开启它。本文,整理了一键开启Hyper-V服务和一键关闭…...

C# 中充血模型和‌贫血模型

在C#中&#xff0c;‌充血模型&#xff08;Rich Domain Model&#xff09;‌和‌贫血模型&#xff08;Anemic Domain Model&#xff09;‌是两种截然不同的领域建模方式&#xff0c;核心区别在于‌业务逻辑的归属‌。以下是通俗易懂的解释&#xff1a; 1. ‌贫血模型&#xff…...

C++中的继承

#include <iostream> using namespace std;// 武器类&#xff08;基类&#xff09; class Weapon { protected:int atk; // 攻击力public:// 构造函数Weapon(int atk 0) : atk(atk) {}// 虚拟析构函数virtual ~Weapon() {}// set 和 get 接口void setAtk(int atk) {this…...

Uubuntu20.04复现SA-ConvONet步骤

项目地址&#xff1a; tangjiapeng/SA-ConvONet: ICCV2021 Oral SA-ConvONet: Sign-Agnostic Optimization of Convolutional Occupancy Networks 安装步骤&#xff1a; 一、系统更新 检查系统是否已经更新到最新版本&#xff1a; sudo apt-get update sudo apt-get upgra…...

Blender模型导入虚幻引擎设置

单位系统不一致 Blender默认单位是米&#xff08;Meters&#xff09;&#xff0c;而虚幻引擎默认使用**厘米&#xff08;Centimeters&#xff09;**作为单位。 当模型从Blender导出为FBX或其他格式时&#xff0c;如果没有调整单位&#xff0c;虚幻引擎会将1米&#xff08;Blen…...

大数据Spark(五十五):Spark框架及特点

文章目录 Spark框架及特点 一、Spark框架介绍 二、Spark计算框架具备以下特点 Spark框架及特点 一、Spark框架介绍 Apache Spark 是一个专为大规模数据处理而设计的快速、通用的计算引擎。最初由加州大学伯克利分校的 AMP 实验室&#xff08;Algorithms, Machines, and Pe…...

深入理解Python asyncio:从入门到实战,掌握异步编程精髓

文章目录 前言一、asyncio基础概念1.1 什么是异步编程&#xff1f;1.2 asyncio核心组件 二、asyncio核心用法详解2.1 事件循环管理2.2协程与任务2.3 异步上下文管理器 三、asyncio高级特性3.1 异步生成器3.2异步队列3.3 异步锁和信号量 四、asyncio实战项目4.1 高性能Web爬虫4.…...

线段树,单点,区间修改查阅

#PermanentNotes/algorithm 思想 首先关于树有许多类型,这里我们主要首线段树,整体思想就是将一个大区间进行拆分,拆分成各个小区间,在我们进行查找,更新时,就是对区间的查找更新 类型 初始化,构建树 代码 const int Z 1e7; const ll INF 1e18; const int maxn 1e5 10…...

音视频(二)ffmpeg编译及推流

FFmpeg 大名鼎鼎&#xff0c;就不多介绍了 1&#xff1a;环境 win11_amd64 ffpmeg download:https://git.ffmpeg.org/ffmpeg.git ffmpeg msys2 download:https://www.msys2.org/ vs2022 (c 写demo用) 用别的也行 usb2.0 摄像头&#xff08;有点老&#xff09; opencv 看上传的…...

syslog 与 Linux 内核日志系统全面解析

在 Linux 系统中&#xff0c;日志是进行系统调试、故障排查和系统安全分析的重要手段。syslog 和内核日志是 Linux 日志组成的核心组件。本文将从原理、实现、配置、常见问题分析等综合解析&#xff0c;全面解读 Linux 下的日志机制。 一、syslog 系统概述 1.1 什么是 syslog …...

SQL问题分析与诊断(8)——关键信息(2)

8.2. 关键信息 8.2.2. 警告 查询计划中&#xff0c;可能会看到出现于操作符上的小图标&#xff0c;特别是黄色或红色的感叹号。这些图标都是警告。并非每个警告都指示一个严重问题&#xff0c;但发现时请检查该图标的属性窗口&#xff0c;其将包含该警告图标的具体细节。 8.…...

HCIA/HCIP基础知识笔记汇总

HCIA/HCIP基础知识笔记汇总 ICT产业链&#xff1a; 上游&#xff1a;芯片制造、元器件生产、光纤光缆制造 中游&#xff1a;硬件组装、软件开发、网络建设维护 下游&#xff1a;电信服务、互联网服务、终端产品 VLAN端口类型&#xff1a; access &#xff1a;…...