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

大数运算之C语言实现

一、 前言

在我们代码编程过程中,我们经常需要处理各种规模的数值。从日常工作中的一些简单算术在到科学研究中的复杂计算,数字无处不在。然而,当数值变的异常庞大时,就需要用到大数运算来进行实现。本文我们将介绍大数运算的基本概念以及C语言实现大数运算的方法。

二、 概念

我们常见的数据其数据范围大都在int(-2^31 ~ 2^31-1)或者long long( -2^62 — 2^62-1)之内,但在一些情况下,我们会遇到超过这个范围的数据,这些数据我们就称之为大数。当然,大数不只是大整数,对于位数较多的小数,如123456799.987654321也适用于大数运算。

大数运算涉及对超出常规数据类型范围的数字进行加减乘除,阶乘,取余等运算。对于大数,我们通常以字符数组的形式存储,因为单个变量无法容纳如此多的位数,其中每个数组元素都对应一个数位。而实现这些运算的大致思路都是模拟竖式计算的过程,即通过模拟进位,借位,取余操作完成计算。

三、 代码实现

下面我们将对大数进行加减乘除,阶乘,取余等运算。

  • 大数加法运算

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>// 函数声明
    char* reverseString(const char* str);
    char* addLargeNumbers(const char* num1, const char* num2);// 主函数
    int main() {// 输入两个大数char num1[1001]; // 假设大数的最大位数为1000,多加一位用于存储字符串结束符'\0'char num2[1001];printf("请输入第一个大数: ");scanf("%1000s", num1); // 限制输入长度,防止缓冲区溢出printf("请输入第二个大数: ");scanf("%1000s", num2);// 调用大数相加函数char* result = addLargeNumbers(num1, num2);// 输出结果printf("结果: %s\n", result);// 释放动态分配的内存free(result);return 0;
    }// 字符串反转函数
    char* reverseString(const char* str) {int len = strlen(str);char* reversed = (char*)malloc((len + 1) * sizeof(char)); // 分配内存用于存储反转后的字符串for (int i = 0; i < len; i++) {reversed[i] = str[len - 1 - i]; // 反转字符串}reversed[len] = '\0'; // 添加字符串结束符return reversed;
    }// 大数相加函数
    char* addLargeNumbers(const char* num1, const char* num2) {char* reversedNum1 = reverseString(num1); // 反转字符串,便于从低位开始相加char* reversedNum2 = reverseString(num2);int len1 = strlen(reversedNum1);int len2 = strlen(reversedNum2);int maxLen = len1 > len2 ? len1 : len2;int carry = 0; // 进位char* result = (char*)malloc((maxLen + 2) * sizeof(char)); // 分配内存用于存储结果,多加一位用于可能的进位和一位用于字符串结束符// 从低位开始逐位相加for (int i = 0; i < maxLen; i++) {int digit1 = i < len1 ? reversedNum1[i] - '0' : 0;int digit2 = i < len2 ? reversedNum2[i] - '0' : 0;int sum = digit1 + digit2 + carry;carry = sum / 10;result[i] = sum % 10 + '0';}// 处理剩余的进位if (carry) {result[maxLen] = carry + '0';maxLen++;}// 添加字符串结束符result[maxLen] = '\0';// 反转结果字符串,得到正确的顺序char* finalResult = reverseString(result);free(reversedNum1); // 释放反转后的输入字符串内存free(reversedNum2);free(result); // 释放中间结果字符串内存return finalResult; // 返回最终结果字符串
    }
    

    演示:在这里插入图片描述

  • 大数减法运算

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <stdbool.h>// 函数声明
    char* reverseString(const char* str);
    char* subtractLargeNumbers(const char* num1, const char* num2);// 主函数
    int main() {// 输入两个大数char num1[1001]; // 假设大数的最大位数为1000,多加一位用于存储字符串结束符'\0'char num2[1001];printf("请输入被减数: ");scanf("%1000s", num1); // 限制输入长度,防止缓冲区溢出printf("请输入减数: ");scanf("%1000s", num2);// 验证被减数是否大于等于减数(简单比较字符串长度,如果不等则按字典序比较)if (strlen(num1) < strlen(num2) || (strlen(num1) == strlen(num2) && strcmp(num1, num2) < 0)) {printf("错误: 被减数必须大于等于减数。\n");return 1;}// 调用大数相减函数char* result = subtractLargeNumbers(num1, num2);// 输出结果printf("结果: %s\n", result);// 释放动态分配的内存free(result);return 0;
    }// 字符串反转函数(与大数加法中相同)
    char* reverseString(const char* str) {int len = strlen(str);char* reversed = (char*)malloc((len + 1) * sizeof(char));for (int i = 0; i < len; i++) {reversed[i] = str[len - 1 - i];}reversed[len] = '\0';return reversed;
    }// 大数相减函数
    char* subtractLargeNumbers(const char* num1, const char* num2) {char* reversedNum1 = reverseString(num1);char* reversedNum2 = reverseString(num2);int len1 = strlen(reversedNum1);int len2 = strlen(reversedNum2);int maxLen = len1;bool isNegative = false; // 标记结果是否为负数(本实现假设被减数大于等于减数,所以结果不为负数)char* result = (char*)malloc((maxLen + 1) * sizeof(char)); // 分配内存,注意这里不需要额外位用于借位,因为我们已经假设被减数足够大// 从低位开始逐位相减for (int i = 0; i < maxLen; i++) {int digit1 = i < len1 ? reversedNum1[i] - '0' : 0;int digit2 = i < len2 ? reversedNum2[i] - '0' : 0;int diff = digit1 - digit2;// 如果当前位不够减,则从前一位借位if (diff < 0) {diff += 10;// 注意:这里我们不需要修改前一位的值,因为我们是逐位计算并存储结果的// 但是在实际实现中,如果需要保留借位的过程,可以引入一个额外的数组来记录借位情况}result[i] = diff + '0';}// 去除结果前导零int start = 0;while (start < maxLen && result[start] == '0') {start++;}// 如果整个结果都是0,则结果应为"0"if (start == maxLen) {strcpy(result, "0");} else {// 将结果字符串前移,以去除前导零for (int i = 0; i < maxLen - start; i++) {result[i] = result[start + i];}result[maxLen - start] = '\0';}// 反转结果字符串,得到正确的顺序char* finalResult = reverseString(result);free(reversedNum1);free(reversedNum2);free(result); // 注意:这里释放的是去除前导零之前的result内存return finalResult;
    }
    

    演示:
    在这里插入图片描述

  • 大数乘法运算

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>char* multiplyLargeNumbers(const char* num1, const char* num2);int main() {char num1[1001], num2[1001];printf("请输入第一个大数: ");scanf("%1000s", num1);printf("请输入第二个大数: ");scanf("%1000s", num2);char* result = multiplyLargeNumbers(num1, num2);printf("结果: %s\n", result);free(result - (result[0] == '0' && *(result + 1) == '\0')); // Adjust free pointer if leading '0' was logically removedreturn 0;
    }char* multiplyLargeNumbers(const char* num1, const char* num2) {int len1 = strlen(num1);int len2 = strlen(num2);int maxLen = len1 + len2;char* result = (char*)calloc(maxLen + 1, sizeof(char)); // +1 for null terminator// Initialize result array with zerosmemset(result, '0', maxLen);result[maxLen] = '\0';// Perform multiplicationfor (int i = len1 - 1; i >= 0; i--) {for (int j = len2 - 1, k = i + j; j >= 0; j--, k--) {int mul = (num1[i] - '0') * (num2[j] - '0');int sum = mul + (result[k + 1] - '0');result[k + 1] = (sum % 10) + '0';result[k] += sum / 10;if (result[k] > '9') {int carry = result[k] - '0' / 10;result[k] = (result[k] - carry * 10) + '0';if (k > 0) {result[k - 1] += carry;} else {// Handle carry overflow, resize result if necessarychar* temp = (char*)realloc(result, maxLen + 2);if (temp) {result = temp;memmove(result + 1, result, maxLen + 1);result[0] = '0' + carry;maxLen++;} else {// Allocation failed, handle errorfree(result);return NULL;}}}}}// Find the start of the non-zero part of the resultint start = 0;while (start < maxLen && result[start] == '0') {start++;}// Shift the result to the left and null-terminate itmemmove(result, result + start, maxLen - start + 1);return result;
    }

    演示:
    在这里插入图片描述

  • 大数除法及取余运算

    #include <stdio.h>
    #include <string.h>void divideLargeNumber(int *largeNumberArray, int divisionFactor, int numberOfDigits);int main()
    {char largeNumberStr[1000]; // 存储大整数的字符串int divisor; // 除数printf("请输入一个大整数(不超过999位)和一个除数(以空格分隔):");scanf("%s%d", largeNumberStr, &divisor);int largeNumberDigits[1000]; // 存储大整数的每一位数字int numberLength = strlen(largeNumberStr); // 大整数的长度for (int i = 0; i < numberLength; i++)largeNumberDigits[i] = largeNumberStr[i] - '0';divideLargeNumber(largeNumberDigits, divisor, numberLength);return 0;
    }void divideLargeNumber(int *largeNumberArray, int divisionFactor, int numberOfDigits) // 开始操作
    {int partialSum = 0; // 当前部分和(累加当前位及之前的数字)int firstDigitOutputFlag = 0; // 标记是否已输出第一个非零商位int remainder = 0; // 余数for (int i = 0; i < numberOfDigits; i++) // 这里没有将商存下来,而是找到一位就输出{partialSum += largeNumberArray[i];if (partialSum < divisionFactor && firstDigitOutputFlag){remainder = partialSum; // 记录有可能最后加上最后一位还是小于divisionFactor的情况的余数printf("0"); // 输出商位为0的情况}if (partialSum >= divisionFactor){printf("商位: %d", partialSum / divisionFactor);partialSum %= divisionFactor; // 更新余数remainder = partialSum; // 记录最后加上最后一位大于divisionFactor的情况的余数partialSum *= 10; // 为下一位数字做准备firstDigitOutputFlag = 1; // 在找到第一个商位之后改变标记状态}else{partialSum *= 10; // 如果当前部分和小于除数,则继续累加下一位数字}}printf("\n");printf("余数:%d\n", remainder); // 输出余数
    }
    

    演示:
    在这里插入图片描述

  • 大数阶乘运算

    #include <stdio.h>
    #include <string.h>
    #include <stdbool.h>#define MAX_DIGITS 1000 // 假设最大阶乘位数不超过1000// 辅助函数:打印大数
    void printLargeNumber(int result[], int length) {for (int i = length - 1; i >= 0; i--) {printf("%d", result[i]);}printf("\n");
    }// 大数阶乘函数
    void factorialLargeNumber(int n, int result[], int* length) {// 初始化结果数组为1(阶乘的初始值)memset(result, 0, sizeof(int) * MAX_DIGITS);result[0] = 1;*length = 1;// 计算阶乘for (int i = 2; i <= n; i++) {int carry = 0; // 进位for (int j = 0; j < *length; j++) {int product = result[j] * i + carry;result[j] = product % 10; // 当前位的值carry = product / 10;     // 进位}// 处理进位while (carry) {result[*length] = carry % 10;carry = carry / 10;(*length)++;}}
    }int main() {int n;printf("请输入一个整数: ");scanf("%d", &n);int result[MAX_DIGITS];int length = 0;factorialLargeNumber(n, result, &length);printf("%d! = ", n);printLargeNumber(result, length);return 0;
    }
    

    演示:
    在这里插入图片描述

四、小结

好了,关于大数运算的代码实现到我们这里就结束了,后面遇到其它我会在继续接着补充,希望对大家有所帮助。

相关文章:

大数运算之C语言实现

一、 前言 在我们代码编程过程中&#xff0c;我们经常需要处理各种规模的数值。从日常工作中的一些简单算术在到科学研究中的复杂计算&#xff0c;数字无处不在。然而&#xff0c;当数值变的异常庞大时&#xff0c;就需要用到大数运算来进行实现。本文我们将介绍大数运算的基本…...

三高“高性能、高并发、高可靠”系统架构设计系列文章

目录 高并发系统的艺术&#xff1a;如何在流量洪峰中游刃有余 《数据密集型应用系统设计》读后感与高并发高性能实践案例 系统稳定性与高可用保障的几种思路 软件系统限流的底层原理解析 技术解决方案调研 延迟队列调研 重试调研 异步回调调研 分库分表调研 分布式事…...

Java设计模式 十八 状态模式 (State Pattern)

状态模式 (State Pattern) 状态模式是一种行为型设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为。状态模式让一个对象在其状态改变时&#xff0c;其行为也随之改变&#xff0c;看起来就像是改变了对象的类。通过将状态的变化封装到不同的状态对象中&#xff0c;…...

Django创建纯净版项目并启动

1.Django的基本目录结构 2. 创建app项目 python manage.py startapp user# python manage.py 是固定的&#xff0c;代表python脚本&#xff0c;主要用于django中的项目管理 # startapp 创建app # user 你的app名字&#xff0c;也就是功能模块名称3.数据库 进入settings.…...

[b01lers2020]Life on Mars1

打开题目页面如下 看了旁边的链接&#xff0c;也没有什么注入点&#xff0c;是正常的科普 利用burp suite抓包&#xff0c;发现传参 访问一下 http://5edaec92-dd87-4fec-b0e3-501ff24d3650.node5.buuoj.cn:81/query?searchtharsis_rise 接下来进行sql注入 方法一&#xf…...

element-plus 的table section如何实现单选

如果是单选那么全新的按钮应该隐藏或者不可编辑的状态。但是我没找到改变成不可编辑的方法&#xff0c;只能采取隐藏 <template><!-- 注意要包一层div根元素&#xff0c;否则css样式可能会不生效&#xff0c;原因不详 --><div><el-table ref"proTab…...

利用Qt5.15.2编写Android程序时遇到的问题及解决方法

文章目录 背景1.文件读写 背景 目前我用的是Qt5.15.2来编写Qt程序&#xff0c;环境的配置看我这篇文章【Qt5.15.2配置Android开发环境】 项目中的一些配置的截图&#xff1a; 1.文件读写 假如直接用 QFileDialog::getExistingDirectory来获取路径的话&#xff0c;会得到类…...

奇怪的单词(快速扩张200个单词)

这是一些非常奇怪的单词&#xff1a; screw n.螺丝&#xff1b;螺丝钉 screwdriver n.起子&#xff0c;螺丝刀&#xff0c;改锥 copulation n.连接 copulate a.配合的 bonk n.撞击&#xff1b;猛击 v.轻击&#xff1b;碰撞ebony n.黑檀couple n.夫妇blonde n.金发女郎intimacy…...

three.js+WebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题(注意本篇说的是Line2,同样也不是阈值方面的问题)

上篇大家消化得如何了&#xff1f; 笔者说过&#xff0c;1级编号不同的两篇博文相对独立&#xff0c;所以这里笔者还是先给出完整代码&#xff0c;哪怕跟&#xff08;3&#xff09;没有太大区别。 这里我们把线的粗细调成5&#xff08;排除难选中的因素&#xff09;&#xff…...

postgresql根据主键ID字段分批删除表数据

生产环境针对大表的处理相对比较麻烦。 方案1、直接truncate&#xff0c;可能会遇到系统卡主的情况&#xff0c;因为truncate的过程中会对表进行加锁&#xff0c;会导致数据不能正常的写入 方案2、创建一个同结构的表结构&#xff0c;rename旧表&#xff0c;不停业务rename表担…...

NIO 和 Netty 在 Spring Boot 中的集成与使用

Netty到底是个啥&#xff0c;有啥子作用 1. Netty 的本质&#xff1a;对 NIO 的封装 NIO 的原生问题&#xff1a; Java 的 NIO 提供了非阻塞 I/O 和多路复用机制&#xff0c;但其使用较为复杂&#xff08;如 Selector、Channel、Buffer 的配置和管理&#xff09;。开发者需要自…...

【AI论文】Sigma:对查询、键和值进行差分缩放,以实现高效语言模型

摘要&#xff1a;我们推出了Sigma&#xff0c;这是一个专为系统领域设计的高效大型语言模型&#xff0c;其独特之处在于采用了包括DiffQKV注意力机制在内的新型架构&#xff0c;并在我们精心收集的系统领域数据上进行了预训练。DiffQKV注意力机制通过根据查询&#xff08;Q&…...

ThinkPHP 8请求处理-获取请求对象与请求上下文

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用Composer初始化ThinkPHP 8应用_thinkphp8 compos…...

【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等

【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等 目录 【设计模式】JAVA 策略 工厂 模式 彻底告别switch if 等 优势 适用场景 项目结构 关键代码 优势 消除 switch&#xff1a;将分支逻辑分散到独立的策略类中。 开闭原则&#xff1a;新增类型只需添加新的 TypeHa…...

Pyecharts之词云图、面积图与堆叠面积图

在数据可视化的精彩世界里&#xff0c;我们可以运用各种各样的图表来展现数据的魅力&#xff0c;帮助我们更好地理解和分析数据。Pyecharts 作为一款功能强大的数据可视化工具&#xff0c;为我们提供了丰富的图表类型&#xff0c;今天我们将深入探讨词云图、面积图和堆叠面积图…...

SpringBoot3+Vue3开发学生选课管理系统

功能介绍 分三个角色登录&#xff1a;学生登录&#xff0c;老师登录&#xff0c;教务管理员登录&#xff0c;不同用户功能不同&#xff01; 1.学生用户功能 选课记录&#xff0c;查看选课记录&#xff0c;退选。选课管理&#xff0c;进行选课。通知管理&#xff0c;查看通知消…...

71.在 Vue 3 中使用 OpenLayers 实现按住 Shift 拖拽、旋转和缩放效果

前言 在前端开发中&#xff0c;地图功能是一个常见的需求。OpenLayers 是一个强大的开源地图库&#xff0c;支持多种地图源和交互操作。本文将介绍如何在 Vue 3 中集成 OpenLayers&#xff0c;并实现按住 Shift 键拖拽、旋转和缩放地图的效果。 实现效果 按住 Shift 键&#…...

Mybatis——sql映射文件中的增删查改

映射文件内的增删查改 准备工作 准备一张数据表&#xff0c;用于进行数据库的相关操作。新建maven工程&#xff0c; 导入mysql-connector-java和mybatis依赖。新建一个实体类&#xff0c;类的字段要和数据表的数据对应编写接口编写mybatis主配置文件 public class User {priva…...

Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合

读书笔记&#xff1a;卓越强迫症强大恐惧症&#xff0c;在亲子家庭、职场关系里尤其是纵向关系模型里&#xff0c;这两种状态很容易无缝衔接。尤其父母对子女、领导对下属&#xff0c;都有望子成龙、强将无弱兵的期望&#xff0c;然而在你的面前&#xff0c;他们才是永远强大的…...

立创开发板入门ESP32C3第八课 修改AI大模型接口为deepseek3接口

#原代码用的AI模型是minimax的API接口&#xff0c;现在试着改成最热门的deepseek3接口。# 首先按理解所得&#xff0c;在main文件夹下&#xff0c;有minimax.c和minimax.h, 它们是这个API接口的头文件和实现文件&#xff0c;然后在main.c中被调用。所以我们一步步更改。 申请…...

【云安全】云原生-Docker(五)容器逃逸之漏洞利用

漏洞利用逃逸 通过漏洞利用实现逃逸&#xff0c;主要分为以下两种方式&#xff1a; 1、操作系统层面的内核漏洞 这是利用宿主机操作系统内核中的安全漏洞&#xff0c;直接突破容器的隔离机制&#xff0c;获得宿主机的权限。 攻击原理&#xff1a;容器本质上是通过 Linux 的…...

为什么IDEA提示不推荐@Autowired❓️如果使用@Resource呢❓️

前言 在使用 Spring 框架时&#xff0c;依赖注入&#xff08;DI&#xff09;是一个非常重要的概念。通过注解&#xff0c;我们可以方便地将类的实例注入到其他类中&#xff0c;提升开发效率。Autowired又是被大家最为熟知的方式&#xff0c;但很多开发者在使用 IntelliJ IDEA …...

PHP:动态网站开发的强大引擎

在互联网技术日新月异的今天&#xff0c;PHP&#xff08;Hypertext Preprocessor&#xff0c;超文本预处理器&#xff09;作为一种开源的服务器端脚本语言&#xff0c;凭借其灵活性和易用性&#xff0c;依然是构建动态网站和Web应用程序的首选之一。从简单的个人博客到复杂的企…...

Linux 目录操作详解

Linux目录操作详解 1. 获取当前工作目录1.1 getcwd()1.2 get_current_dir_name() 2. 切换工作目录2.1 chdir() 3. 创建和删除目录3.1 mkdir()3.2 rmdir() 4. 获取目录中的文件列表4.1 opendir() 打开目录4.2 readdir() 读取目录内容4.3 closedir() 关闭目录 5. dirent 结构体6.…...

IMX6ull项目环境配置

文件解压缩&#xff1a; .tar.gz 格式解压为 tar -zxvf .tar.bz2 格式解压为 tar -jxvf 2.4版本后的U-boot.bin移植进SD卡后&#xff0c;通过串口启动配置开发板和虚拟机网络。 setenv ipaddr 192.168.2.230 setenv ethaddr 00:04:9f:…...

redis实现lamp架构缓存

redis服务器环境下mysql实现lamp架构缓存 ip角色环境192.168.242.49缓存服务器Redis2.2.7192.168.242.50mysql服务器mysql192.168.242.51web端php ***默认已安装好redis&#xff0c;mysql 三台服务器时间同步&#xff08;非常重要&#xff09; # 下载ntpdate yum -y install…...

与机器学习相关的概率论重要概念的介绍和说明

概率论一些重要概念的介绍和说明 1、 试验 &#xff08;1&#xff09;试验是指在特定条件下&#xff0c;对某种方法、技术、设备或产品&#xff08;即&#xff0c;事物&#xff09;进行测试或验证的过程。 &#xff08;2&#xff09;易混淆的概念是&#xff0c;实验。实验&…...

深度学习 Pytorch 单层神经网络

神经网络是模仿人类大脑结构所构建的算法&#xff0c;在人脑里&#xff0c;我们有轴突连接神经元&#xff0c;在算法中&#xff0c;我们用圆表示神经元&#xff0c;用线表示神经元之间的连接&#xff0c;数据从神经网络的左侧输入&#xff0c;让神经元处理之后&#xff0c;从右…...

常用集合-数据结构-MySql

目录 java核心&#xff1a; 常用集合与数据结构: 单例集合: 双列集合: 线程安全的集合: ConcurrentHashMap集合: HashTable集合: CopyOnWriteArrayList集合: CopyOnWriteArraySet集合: ConcurrentLinkedQueue队列: ConcurrentSkipListMap和ConcurrentSkipListSet&…...

策略模式 - 策略模式的使用

引言 在软件开发中&#xff0c;设计模式是解决常见问题的经典解决方案。策略模式&#xff08;Strategy Pattern&#xff09;是行为型设计模式之一&#xff0c;它允许在运行时选择算法的行为。通过将算法封装在独立的类中&#xff0c;策略模式使得算法可以独立于使用它的客户端…...

【贪心算法】在有盾牌的情况下能通过每轮伤害的最小值(亚马逊笔试题)

思路&#xff1a; 采用贪心算法&#xff0c;先计算出来所有的伤害值&#xff0c;然后再计算每轮在使用盾牌的情况下能减少伤害的最大值&#xff0c;最后用总的伤害值减去能减少的最大值就是最少的总伤害值 public static long getMinimumValue(List<Integer> power, int…...

零基础Vue学习1——Vue学习前环境准备

目录 环境准备 创建Vue项目 项目目录说明 后续开发过程中常用命令 环境准备 安装开发工具&#xff1a;vscode、webstorm、idea都可以安装node:V22以上版本即可安装pnpm 不知道怎么安装的可以私信我教你方法 创建Vue项目 本地新建一个文件夹&#xff0c;之后在文件夹下打开…...

小游戏源码开发搭建技术栈和服务器配置流程

近些年各种场景小游戏开发搭建版本层出不穷,山东布谷科技拥有多年海内外小游戏源码开发经验&#xff0c;现为从事小游戏源码开发或游戏运营的朋友们详细介绍小游戏开发及服务器配置流程。 一、可以对接到app的小游戏是如何开发的 1、小游戏源码开发的需求分析&#xff1a; 明…...

【Rust自学】15.3. Deref trait Pt.2:隐式解引用转化与可变性

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.3.1. 函数和方法的隐式解引用转化(Deref Coercion) 隐式解引用转化(Deref Coercion)是为…...

SQL-leetcode—1174. 即时食物配送 II

1174. 即时食物配送 II 配送表: Delivery ------------------------------------ | Column Name | Type | ------------------------------------ | delivery_id | int | | customer_id | int | | order_date | date | | customer_pref_delivery_date | date | -------------…...

css3 svg制作404页面动画效果HTML源码

源码介绍 css3 svg制作404页面动画效果HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果 效果预览 源码如下 <!doctype html> <html> <head> <meta charse…...

MATLAB提供的颜色映射表colormap——伪彩色

图像处理领域的一个习惯&#xff1a;不是真实的颜色&#xff0c;一般用伪彩色。一是说明不是物体本身的颜色&#xff0c;二是彩色更容易分辨。 MATLAB陆续提供了16种颜色映射表colormap。 之前的都很丑&#xff0c;近5年新增的4种还可以。总的说来还是丑。 这是一种鸟的名字。…...

2013年蓝桥杯第四届CC++大学B组真题及代码

目录 1A&#xff1a;高斯日记&#xff08;日期计算&#xff09; 2B&#xff1a;马虎的算式&#xff08;暴力模拟&#xff09; 3C&#xff1a;第39级台阶&#xff08;dfs或dp&#xff09; 4D&#xff1a;黄金连分数&#xff08;递推大数运算&#xff09; 5E&#xff1a;前缀…...

我的创作纪念日——1/23

机缘 想起写博客&#xff0c;其实是当时看鹏哥C语言时&#xff0c;他说通过写博客的方式来记录自己学习过程&#xff0c;有利于提升自己。尽管我只看了几集就没怎么看&#xff0c;但是写博客的习惯保留下来。 至于为什么&#xff0c;一方面单纯当作单个代码库&#xff0c;把自…...

C# Interlocked 类使用详解

总目录 前言 在多线程编程中&#xff0c;确保多个线程对共享资源的安全访问是一个关键挑战。C# 提供了多种同步机制来处理并发问题&#xff0c;其中 System.Threading.Interlocked 类提供了一种轻量级的方法来进行原子操作。它允许您执行一些常见的增量、减量、交换等操作&…...

SYN Flooding的攻击原理

SYN Flooding是一种常见的网络攻击方式&#xff0c;属于拒绝服务攻击&#xff08;DoS&#xff09;的一种&#xff0c;其攻击原理主要是利用了TCP协议的三次握手过程&#xff0c;以下是具体介绍&#xff1a; TCP三次握手正常流程 第一次握手&#xff1a;客户端向服务器发送一个…...

Mono里运行C#脚本35—加载C#语言基类的过程

前面大体地分析了整个Mono运行过程,主要从文件的加载,再到EXE文件的入口点, 然后到方法的编译,机器代码的生成,再到函数调用的跳板转换,进而解析递归地实现JIT。 但是还有很多功能没有解析的,就是C#语言相关最多的,就是类的加载,以及类语言设计的实现属性, 比如类的…...

类包含类 三角分形 面向对象

Cad c# Sj类的构造函数&#xff0c;直接包含电线和三个分形三角形。...

Flutter:搜索页,搜索bar封装

view 使用内置的Chip简化布局 import package:chenyanzhenxuan/common/index.dart; import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:tdesign_flutter/tdesign_flutter.dart;import i…...

chrome插件:网页图片高清下载

前置条件&#xff1a; 安装有chrome谷歌浏览器的电脑 使用步骤&#xff1a; 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.输入需要访问的网址&#xff0c;点击扩展插件即可进行图片…...

docker 简要笔记

文章目录 一、前提内容1、docker 环境准备2、docker-compose 环境准备3、流程说明 二、打包 docker 镜像1、基础镜像2、国内镜像源3、基础的dockerfile4、打包镜像 四、构建运行1、docker 部分2、docker-compose 部分2.1、构建docker-compose.yml2.1.1、同目录构建2.1.2、利用镜…...

Java I/O 流介绍

Java学习资料 Java学习资料 Java学习资料 一、引言 在 Java 编程中&#xff0c;I/O&#xff08;Input/Output&#xff09;流是处理输入和输出操作的核心机制。它允许程序与外部设备&#xff08;如文件、网络连接、键盘、显示器等&#xff09;进行数据交互。通过使用 I/O 流&…...

C# OpenCV机器视觉:利用CNN实现快速模板匹配

在一个阳光灿烂的周末&#xff0c;阿强正瘫在沙发上&#xff0c;百无聊赖地换着电视频道。突然&#xff0c;一则新闻吸引了他的注意&#xff1a;某博物馆里一幅珍贵的古画离奇失踪&#xff0c;警方怀疑是被一伙狡猾的盗贼偷走了&#xff0c;现场只留下一些模糊不清的监控画面&a…...

数据结构——实验七·排序

欢迎各位大佬们来到Tubishu的博客&#x1f31f; Tubishu是一名计算机本科生&#xff0c;不定期发送一些在学校的成果供佬们消遣~希望能为佬的编程之路添砖加瓦⭐&#x1f525; 求各位大佬们垂怜&#x1f525;点赞评论一下呗&#x1f525;&#x1f525; 本文专栏 ➡️ 数据结构 …...

Flutter_学习记录_Tab的简单Demo~真的很简单

1. Tab的简单使用了解 要实现tab(选项卡或者标签视图)需要用到三个组件&#xff1a; TabBarTabBarViewTabController 这一块&#xff0c;我也不知道怎么整理了&#xff0c;直接提供代码吧&#xff1a; import package:flutter/material.dart;void main() {runApp(MyApp());…...