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

[C++] 大数减/除法

目录

  • 高精度博客 - 前两讲
  • 高精度减法
  • 高精度除法
  • 高精度系列函数完整版

高精度博客 - 前两讲

讲次名称链接
高精加法[C++] 高精度加法(作用 + 模板 + 例题)
高精乘法[C++] 高精度乘法

高精度减法

void subBIG(int x[], int y[], int z[]){z[0] = max(x[0], y[0]);for(int i = 1; i <= z[0]; i++) z[i] = x[i] - y[i];for(int i = 1; i <= z[0]; i++){if(z[i] < 0){z[i] += 10;z[i + 1]--;}}while(z[z[0]] == 0 && z[0] > 1) z[0]--;
}

这个函数的思路还是在模拟列竖式, 最后的while是删除前缀0(以免出现类似000000的结果, 仅返回0)

高精度除法

记忆版

void divBIG(int x[],int y,int z[]){z[0] = x[0];int r = 0;for(int i = z[0]; i >= 1; i--){int t = r * 10 + x[i];z[i] = t / y;r = t % y;}while(z[z[0]] == 0 && z[0] > 1) z[0]--;
}

讲解版

void divBIG(int x[],int y,int z[]){z[0] = x[0];							// 有效位数设置// 模拟列竖式int r = 0;for(int i = z[0]; i >= 1; i--){			// 倒序循环int t = r * 10 + x[i];z[i] = t / y;r = t % y;}while(z[z[0]] == 0 && z[0] > 1) z[0]--;	// 去除前导零
}

高精度系列函数完整版

我们的3讲高精度即将结束, 给出完整的函数代码~

void s2BIG(string s, int a[]){int len = s.size();for(int i = 1; i <= len; i++){a[i] = s[len - i] - '0';}a[0] = len;
}void i2BIG(int n, int a[]){int cur = 0;while(n > 0){cur++;a[cur] = n % 10;n /= 10;}if(cur == 0) cur++;a[0] = cur;
}void printBIG(int a[]){int len = a[0];for(int i = len; i > 0; i--){cout << a[i];}cout << endl;
}void addBIG(int x[], int y[], int z[]){z[0] = max(x[0], y[0]);for(int i = 1; i <= z[0]; i++)z[i] = x[i] + y[i];for(int i = 1; i <= z[0]; i++){z[i + 1] += z[i] / 10;z[i] %= 10;if(z[z[0] + 1] != 0)z[0]++;}
}/*
如果x比y小, 则返回true
否则(y >= x)返回false
*/
bool cmpBIG(int x[], int y[]){int lx = x[0], ly = y[0];if(lx != ly) return lx < ly;for(int i = lx; i >= 1; i--){if(x[i] != y[i]) return x[i] < y[i];}return false;
}void mulBIG(int x[], int y[], int z[])
{for (int i = 1; i <= x[0]; i++){for (int j = 1; j <= y[0]; j++){z[i + j - 1] += x[i] * y[j];}}z[0] = max(x[0], y[0]);for (int i = 1; i <= z[0]; i++){z[i + 1] += z[i] / 10;z[i] %= 10;if (z[z[0] + 1] > 0) z[0]++;}while (z[z[0]] == 0 && z[0] > 1) z[0]--;
}void subBIG(int x[], int y[], int z[]){z[0] = max(x[0], y[0]);for(int i = 1; i <= z[0]; i++) z[i] = x[i] - y[i];for(int i = 1; i <= z[0]; i++){if(z[i] < 0){z[i] += 10;z[i + 1]--;}}while(z[z[0]] == 0 && z[0] > 1) z[0]--;
}void divBIG(int x[],int y,int z[]){z[0] = x[0];int r = 0;for(int i = z[0]; i >= 1; i--){int t = r * 10 + x[i];z[i] = t / y;r = t % y;}while(z[z[0]] == 0 && z[0] > 1) z[0]--;
}
http://www.xdnf.cn/news/377569.html

相关文章:

  • C++之多态
  • Linux基础(文件权限和用户管理)
  • VBA —— 学习Day5
  • JVM 逃逸分析
  • 怎么免费下载fbx格式模型、和blender格式文件模型,还可以在线编辑修改
  • AVL树实现
  • LLMs之ChatGPT:《Connecting GitHub to ChatGPT deep research》翻译与解读
  • 湖北理元理律师事务所:债务优化如何实现还款与生活的平衡?
  • window 显示驱动开发-AGP 类型伸缩空间段
  • Python基于Django的高校教室管理系统【附源码、文档说明】
  • 等价无穷小代换
  • LeetCode LCR 007. 三数之和 (Java)
  • 学习适应对智能软件对对象的属性进行表征、计算的影响
  • day010-命令实战练习题
  • 《C++中插入位的函数实现及示例说明》
  • 大模型中的三角位置编码实现
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类边距QMarginsF)
  • 【部署】win10的wsl环境下启动dify的web前端服务
  • 21.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--身份认证服务拆分规划
  • linux perf top分析系统性能
  • 光流 | 基于深度学习的光流估计算法汇总,原理,公式,流程图,代码
  • 人形机器人量产元年开启,AI与物理世界深度融合
  • CAS操作
  • Ceph集群故障处理 - PG不一致修复
  • [SV]等待32个instance的某一个信号的pulse,该怎么写?
  • Windows 系统 - Trae 内 终端 无法使用 node (重新配置 nodejs 路径)
  • 青藏高原东北部祁连山地区250m分辨率多年冻土空间分带指数图(2023)
  • AtCoder AT_abc405_d ABC405D - Escape Route
  • 智慧能源大数据平台建设方案(PPT)
  • 数字孪生实战笔记(1)数字孪生的含义、应用及技术体系