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

高精度算法:加法

当我们的数字大小是10的9次方以内的话,我们可以用int来存储,当我们的数字大小是10的18次方以内的时候我们可以用long long存储,当我们的数字如果比10的18次方还大的话,我们是无法计算的,这时候我们就要用高精度算法模拟实现加减乘除的算法

我们第一步就是先把数字逆序存储在数组里面,然后模拟我们小学的竖式加法,如果有进位就进位,最后我们要处理一下如果越界的数组元素里如果还有进位,就要让有效元素加1

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N], c[N];
int la, lb, lc;
void add()
{
	for (int i = 0; i < lc; i++)
	{
		c[i] += a[i] + b[i];
		if (c[i] >= 10)
		{
			c[i + 1] += c[i] / 10;
		}
		c[i] %= 10;
	}
	if (c[lc]) lc++;
}
int main()
{
	string s1, s2;
	cin >> s1 >> s2;
	la = s1.size();
	lb = s2.size();
	lc = max(la, lb);
	for (int i = 0; i < la; i++)
	{
		a[la - 1 - i] = s1[i] - '0';
	}
	for (int i = 0; i < lb; i++)
	{
		b[lb - 1 - i] = s2[i] - '0';
	}
	add();
	for (int i = lc - 1; i >= 0; i--)
	{
		cout << c[i];
	}
	return 0;
}


http://www.kler.cn/a/524002.html

相关文章:

  • [STM32 - 野火] - - - 固件库学习笔记 - - -十三.高级定时器
  • 【Rust自学】15.7. 循环引用导致内存泄漏
  • FreeRTOS学习 --- 动态任务创建和删除的详细过程
  • 【深度学习】 UNet详解
  • 模糊综合评价
  • 云计算技术深度解析与代码使用案例
  • DeepSeek辅助学术写作摘要内容
  • 1.25学习记录
  • 工业级 RAG 实现 - QAnything
  • LeetCode100之子集(78)--Java
  • 合并二叉树(力扣617)
  • Verilog语言学习总结
  • Linux 4.19内核中的内存管理:x86_64架构下的实现与源码解析
  • 字节一面, Go语言的Map 的扩容机制是怎样的?
  • (三)Session和Cookie讲解
  • 2025春晚刘谦魔术揭秘魔术过程
  • 【仪器分析】FACTs-幅度
  • 【deepseek】deepseek-r1本地部署-第二步:huggingface.co替换为hf-mirror.com国内镜像
  • python学opencv|读取图像(四十八)使用cv2.bitwise_xor()函数实现图像按位异或运算
  • MySQL知识点总结(十三)
  • 【LeetCode】--- 二叉树的所有路径
  • nginx分发请求超时切换服务
  • C#:25大前沿特性揭秘
  • Axure PR 9 旋转效果 设计交互
  • C#System.Threading.Timer使用实例
  • 有限元分析学习——Anasys Workbanch第一阶段笔记梳理