2025-03-03 学习记录--C/C++-PTA 7-38 数列求和-加强版

embedded/2025/3/4 11:00:57/

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

在这里插入图片描述

二、解题思路 ⭐️

在这里插入图片描述

主要利用进位加法器的思想(将 小学时期就会的加法运算 转化成 计算机语言):(下面 以a3n8 为例)

  • 第1步、动态分配数组,然后从右往左,依次按列排序(从第1列到第8列);
  • 第2步、遍历,然后分别计算每一列的和(content),比如:第1列有83,则:content = 8 * 3=24,以此类推;
  • 第3步、计算当前列的进位 和 当前列的余数:用 (content + 当前列的进位) / 10(content + 当前列的进位) % 10 【注意:(content + 当前列的进位) / 10下一列的进位哦,即第1列的进位是0】;
  • 第4步、如果最高位有进位,先输出最高位的进位;然后 从高位到低位输出余数(将获得余数 倒序输出);
  • 第5步、释放动态分配的内存。

在这里插入图片描述

三、代码(C语言)⭐️

#include <stdio.h>
#include <stdlib.h> // 用于动态内存分配int main() {int a, n;scanf("%d %d", &a, &n);// 处理特殊情况:n为0时,直接输出0if (n == 0) {printf("0\n");return 0;}// 【关键】动态分配数组,大小为n+1,以容纳可能的最高位进位int *carryArr = (int *)calloc(n + 1, sizeof(int)); // 进位数组,初始化为0int *remainderArr = (int *)calloc(n + 1, sizeof(int)); // 余数数组,初始化为0// 计算每一位的和for (int j = n, i = 0; j > 0; j--, i++) {int content = j * a; // 当前位的值// printf("内容:%d ", content); // 当前位的值(当前列 相加 的 内容)// printf("进位:%d ",carryArr[i]); // 进位content += carryArr[i]; // 加上上一位的进位// 处理进位carryArr[i + 1] = content / 10; // 计算新的进位remainderArr[i] = content % 10; // 计算当前位的余数// printf("余数:%d\n",remainderArr[i]); // 余数}// 输出结果// 如果最高位有进位,先输出最高位的进位if (carryArr[n] != 0) {printf("%d", carryArr[n]);}// 从高位到低位输出余数for (int i = n - 1; i >= 0; i--) {printf("%d", remainderArr[i]);}printf("\n");// printf("\n"); 的作用是确保输出结果后换行,使程序的输出更加规范、清晰,并避免可能的意外行为。// 这是一种良好的编程习惯,建议在输出结果后始终添加换行符。// 释放动态分配的内存free(carryArr);free(remainderArr);return 0;
}

四、知识点 ⭐️

(一)、stdlib的全称及功能

在这里插入图片描述

stdlib的全称是Standard Library‌。🦋

  • C语言中,stdlib是标准库的缩写,提供了一组通用的函数,用于执行多种任务,包括内存分配(如malloccallocfree)、程序控制(如exitabort)、字符串处理(如atoiatofstrtol)等。‌

stdlib库的主要功能:🦋

  • 1、内存管理‌:提供内存分配和释放的函数,如malloccallocfree
  • 2、程序控制‌:包含用于程序终止和异常处理的函数,如exitabort
  • 3、字符串处理‌:提供字符串转换和操作的函数,如atoiatofstrtol等。
  • 4、其他功能‌:还包括随机数生成、数学计算等功能。

(二)、malloccalloc 之间的相同点和不同点

在这里插入图片描述

(1)、相同点:🍭
  1. 动态内存分配
    • 两者都用于在堆(heap)上动态分配内存。
    • 分配的内存需要手动释放,使用 free() 函数。
  2. 返回指针
    • 两者都返回一个指向分配内存起始地址的 void* 指针。
    • 如果分配失败,两者都返回 NULL
  3. 需要包含头文件
    • 两者都需要包含 <stdlib.h> 头文件。
  4. 手动管理内存
    • 分配的内存不会自动释放,需要程序员手动调用 free() 来释放内存,否则会导致内存泄漏。
(2)、不同点:🍭
特性malloccalloc
初始化不初始化分配的内存,内容为随机值。初始化分配的内存为 0
参数接受一个参数:需要分配的总字节数。接受两个参数:元素个数和每个元素的大小。
使用场景适用于不需要初始化内存的场景。适用于需要初始化内存为 0 的场景。
性能较快,因为不需要初始化内存。较慢,因为需要将内存初始化为 0。
语法void* malloc(size_t size);void* calloc(size_t num, size_t size);

在这里插入图片描述

// malloc
int *arr = (int *)malloc(10 * sizeof(int)); // 分配 10 个 int 大小的内存,内容未初始化
// calloc
int *arr = (int *)calloc(10, sizeof(int)); // 分配 10 个 int 大小的内存,并初始化为 0
(3)、总结:🍭
  • 如果你需要分配内存并且希望初始化为 0,使用 calloc
  • 如果你不需要初始化内存,或者需要手动初始化,使用 malloc
  • 无论使用哪个函数,都要记得在不再需要内存时调用 free() 来释放内存,避免内存泄漏

在这里插入图片描述

如若转载,请表明文章转载自此处哦,谢谢啦~ 😊 毕竟是我一笔一笔辛苦总结敲出来滴😭。希望可以帮助到大家哦❤️。


http://www.ppmy.cn/embedded/169899.html

相关文章

Docker 常用指令手册(学习使用)

CentOS Docker 实用指令手册 1. 安装与配置 # CentOS 安装Docker sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io sudo systemctl st…

基于RK3588的重症监护信息系统应用解决方案

重症监护信息系统是医院临床信息系统的重要组成部分&#xff0c;也是医院信息化建设的重要组成部分。通过集成化的电子病历、实时监测、决策支持等功能&#xff0c;提高重症患者的诊疗效率和质量。 图片来源于网络 重症监护信息系统主要由数据信息采集单元、信息处理单元、通信…

C# 实现鼠标轨迹录制与回放自动化功能(附源码)

在软件自动化测试或者重复性办公任务中&#xff0c;鼠标操作的自动化可以大大减少人工干预&#xff0c;提高工作效率。这里将详细介绍如何使用 C# 实现鼠标轨迹的录制与回放功能&#xff0c;代码结构清晰&#xff0c;具有较强的扩展性。 引用 NuGet 包 在开发这个功能时&…

SpringMVC学习(入门案例思路及实现、Web容器初始化与SpringMVC配置类)(2)

目录 一、SpringMVC入门案例实现思路。 &#xff08;1&#xff09;核心依赖坐标分析。 &#xff08;2&#xff09;控制器类及其所使用注解分析。 &#xff08;3&#xff09;SpringMVC配置类及所使用注解分析。 &#xff08;4&#xff09;Tomcat启动时加载SpringMVC配置。(Web容…

ECS单机部署Hadoop

ECS单机部署Hadoop 系统准备 更新系统 sudo yum update -y sudo yum install -y wget vim net-tools openssh-server关闭防火墙 sudo systemctl stop firewalld -- 关闭防火墙 sudo systemctl disable firewalld -- 禁止自启动 sudo systemctl status firewalld -- 查看防…

(十 八)趣学设计模式 之 观察者模式!

目录 一、 啥是观察者模式&#xff1f;二、 为什么要用观察者模式&#xff1f;三、 观察者模式的实现方式四、 观察者模式的优缺点五、 观察者模式的应用场景六、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢博主的讲解方式&#xff0c;…

蓝桥杯web第三天

展开扇子题目&#xff0c; #box:hover #item1 { transform:rotate(-60deg); } 当悬浮在父盒子&#xff0c;子元素旋转 webkit display: -webkit-box&#xff1a;将元素设置为弹性伸缩盒子模型。-webkit-box-orient: vertical&#xff1a;设置伸缩盒子的子元素排列方…

webpack一篇

目录 一、构建工具 1.1简介 二、Webpack 2.1概念 2.2使用步骤 2.3配置文件&#xff08;webpack.config.js&#xff09; mode entry output loader plugin devtool 2.4开发服务器&#xff08;webpack-dev-server&#xff09; grunt/glup的对比 三、Vite 3.1概念 …