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

高精度之加减乘除之多解总结(加与减篇)

开篇总述:精度计算的教学比较杂乱,无系统的学习,且存在同法多线的方式进行同一种运算,所以我写此篇的目的只是为了直指本质,不走教科书方式,步骤冗杂。

一,加法

我在此讲两种方法:

1,首先科普常识:

length()和size()函数不可统计字符型数组大小;sizeof返回的是总数组

2,为什么字符型数组可以直接接收输入而不用索引接收

原因:​数组名的隐式转换规则​ 和 ​输入函数的设计机制

(1)数组名的隐式转化:

在代码中直接使用字符型数组组名,它会 ​自动退化为指向数组首元素的指针​。

s1 作为指针传递了数组的起始内存地址,输入函数(如 scanf)会从该地址开始 ​连续写入字符,直到遇到终止符(如空格、换行或字符串结束符 \0

(2)输入函数工作机制:

以 scanf("%s", s1) 为例:

  1. 按格式读取​:%s 表示按字符串格式读取输入。
  2. 连续内存写入​:
    • 从 s1 的起始地址开始,逐个写入字符到 s1[0]s1[1]s1[2]...
    • 自动在末尾添加 \0 终止符(因此数组长度需足够大)

3,为什么其他数组不能一次输入连续读入

  • 字符数组的特殊性​:
    • 字符串本质是 ​连续的字符序列,天然适合用指针连续操作。
    • 输入函数(如 scanf)专门为字符串设计了 %s 格式符。
  • 其他类型数组​:
    • 例如 int a[505],每个元素可能需不同格式(如 %d),无法统一连续处理。
    • 必须显式指定索引或指针偏移

好了,基础知识已经掌握了,让我们直接看代码吧。

法一:

倒置是因为加法是从后往前加的,所以倒置过来在代码里从前往后加模拟,只是换了方向。

此时里面的加法模拟, 我们先不看加号就是这样,e[i] = c[i] + d[i],e数组统计数字总和,每个位数上的数字相加,此时会出现加后为两位数,此时要往后进一位 ,所以有  e[i + 1]  = e[i]/ 10;
而原来的位数上保留个位上的数字 所以有  e[i] = e[i] % 10; 但之后进入下一次循环,开始加下一个位数,此时会出现一种情况,在前一位的加法里面,如果有进位发生到此处怎么把进位的数加上,所以此时有了   e[i] += c[i] + d[i]  将之前的进位的情况数字加上。

法二:

只是进位的方式发生改变,此时jw单独设成一个变量,如果前面有jw,在下一次循环加上。

之后循环完毕,看是否还有进位,若还有则总位数加1,将jw变量设在开头代表进位的数字,m数组在函数里面就已经将结果输入完毕,最后只需要传入位数。

最后返回的是运算完成后数字的位数

二,减法

注意:此题重在分析:

1,减是两个数字相减,此时如果第一个数比第二个大,则可以安全相减,若比第二个小,则需要添负号,再把两数反过来相减,这就涉及到数学知识,两个数若相减,前一个数比后一个数小,则它们最后的结果相当于后面大的数减前面小的数,再在前面添负号。

2,而此时,就需要设置一个布尔类型判断两数谁小了。

原题解如下:

此时涉及到字符串的知识

字典序:

字符串比较规则。

字典序的核心规则​(以 m > n 为例):

m 和 n 都是字符串,但怎么比较大小

  1. 从左到右逐字符比较
    比较 m 和 n 的第一个字符:

    • 如果 m[0] 的ASCII码 ​大于​ n[0] → 直接判定 m > n 为 true
    • 如果 ​小于​ → 判定为 false
    • 如果 ​相等​ → 继续比较下一个字符。
  2. 若所有字符均相同

    • 较长的字符串更大(例如 "hello" > "hell")。
    • 长度和内容完全相同时 → m > n 为 false

比较的是字符串里面每个字符的ASCLL编码。

 m > n ,此为逐个逐个比较字符串里面逐个的字符编码,看谁先出现大的数,

但是思考 "100"和"99"这类情况,则反而判断出后面比前面大,那该怎么克服呢,只需要按我题解一样先判断长短就行。

ok,结束,下期的事我们下期再聊。

http://www.xdnf.cn/news/373753.html

相关文章:

  • C++GO语言微服务和服务发现②
  • Java—— 泛型详解
  • PLC可编程控制器在接地电阻柜接触器柜中的智能化控制实践
  • 最大公约数gcd和最小公倍数lcm
  • `RotationTransition` 是 Flutter 中的一个动画组件,用于实现旋转动画效果
  • 跨境热销产品安全危机:一场召回事件背后的全球合规挑战
  • 提高工作效率的新选择[特殊字符]——Element Plus UI库
  • 基于小波神经网络(WNN)的回归预测模型【MATLAB】
  • 精品,第22章 Python3 数据类型与文件操作详解
  • Jmeter中的Json提取器如何使用?
  • 数据分析2
  • C.printf 函数基础
  • (51单片机)LCD显示红外遥控相关数字(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)
  • 2025数维杯数学建模A题完整参考论文(共36页)(含模型、可运行代码、数据)
  • `C_PiperInterface` 类接口功能列表
  • Shell编程之正则表达式与文本处理器
  • 数字果园管理系统的设计与实现(Tensorflow的害虫识别结合高德API的害虫定位与Websocket的在线聊天室)
  • springboot生成二维码到海报模板上
  • 【计算机视觉】OpenCV项目实战:基于OpenCV的图像分割技术深度解析与实践指南
  • Linux系统:虚拟文件系统与文件缓冲区(语言级内核级)
  • 深度解析 MySQL 与 Spring Boot 长耗时进程:从故障现象到根治方案(含 Tomcat 重启必要性分析)
  • 关于一些平时操作系统或者软件的步骤转载
  • 助力你的Neovim!轻松管理开发工具的魔法包管理器来了!
  • C/C++复习-- C语言初始基础
  • 详解多协议通信控制器
  • 养生:为健康生活添彩
  • Unreal 从入门到精通之VR常用操作
  • DataBinding与Kotlin优化视图绑定
  • 微调ModernBERT为大型语言模型打造高效“过滤器”
  • JMeter 中通过 WebSocket (WS) 协议发送和接收 Protocol Buffers (Proto) 消息