大整数加法计算
普通数字的运算,我们可以直接运用已有类型int, long, long long等等计算,但要是数字非常大,这些类型是远远装不下的。
故而很多情况下需要我们自己来设置大整数运算,本篇记录的是大整数的加法运算的方法。
对于加法运算,第一个方法是模拟手算。先来看看手算的步骤:
手算的时候,我们会先把个位相加,有进位则向前进一位,然后计算下一位,重复此步骤。若两个数的位数不同,计算时我们会把位数长的放在上面,位数短的放在下面。短位的数加完后,长位的数则和0相加。
实现加法计算的思路很简单,首先把数字都当作字符串对待,因为字符串是可以根据内存无限长的。在C语言中我们可以用char数组来表示,C++可以用string。然后我们需要再定义一个保存的结果字符串,它的长度可以初步设置为较长数字的长度。
实现代码:
#include <iostream>
#include <string>
std::string Add(std::string a, std::string b)
{
//a一直为位数较长的字符串
if (a.length() < b.length())
{
a.swap(b);
}
std::string result(a.length(), 0); //初步设置result长度为较长字符长度
b.insert(0, a.length() - b.length(), '0'); //较短的字符串前面补零,方便计算
int carry = 0; //进位
for (int i = a.length() - 1; i >= 0; i--)
{
int sum = (a[i] - 48) + (b[i] - 48) + carry;
carry = sum / 10;
result[i] = sum % 10 + 48;
}
//若进位不为0,还要在前面补上进位
if (carry != 0)
{
result.insert(result.begin(), carry + 48);
}
return result;
}
int main()
{
std::string a, b;
std::cin >> a >> b;
std::cout << Add(a, b);
std::cin.get();
return 0;
}
现在我们可以轻松计算超大整数的加法运算了。
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】开源 Linux 服务器运维管理面板 1Panel V2 版本正式发布
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 协程本质是函数加状态机——零基础深入浅出 C++20 协程
· 编码之道,道心破碎。
· 记一次 .NET 某发证机系统 崩溃分析
· 微服务架构学习与思考:SOA架构与微服务架构对比分析
· tomcat为什么假死了
· 历时半年,我将一个大型asp.net的零代码快速开发平台转成了java
· C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码)
· 推荐五大AI+MCP自动化测试工具!
· 记一次 .NET 某无语的电商采集系统 CPU爆高分析
· Spring Boot 启动优化实践