【模版】高精度减法 (A - B problem)
直接看代码和注释吧qwq高精度就是模拟嘛ww
还是python好,自带高精度
#include<bits/stdc++.h>
#define MAXN 10500
using namespace std;
string a, b;
//选择字符串。因为字符串储存了每个串的长度,可以直接调用。
int na[MAXN], nb[MAXN], ans[MAXN];
bool pd;
int main()
{
cin >> a >> b;
if((a < b && a.size() == b.size()) || a.size() < b.size())
{
swap(a, b);
pd = true; //判断a-b为负数的情况,其实也就是转化为-(b-a)
}
for(int i = a.size(); i > 0; i --)na[i] = a[a.size() - i] - '0';
for(int i = b.size(); i > 0; i --)nb[i] = b[b.size() - i] - '0';
//将字符串中的信息转化到数组中,数组模拟数字。
int maxl = max(a.size(), b.size());
//找到两个数中的最大位,为for循环服务
for(int i = 1; i <= maxl; i ++)
{
if(na[i] < nb[i])
{
na[i + 1] --; //模拟借位
na[i] += 10;
}
ans[i] = na[i] - nb[i];
}
while(ans[maxl] == 0)maxl --;//防止减后降位,多输出若干0
if(pd == true)cout << "-";//b>a时,a - b < 0 所以打上负号
for(int i = maxl; i > 0; i --)cout << ans[i];
if(maxl < 1)cout << "0";。//相减等于0的情况
return 0;
}
这里需要一提的是判断 b>a的方法。很显然,这里a,b都是字符串型。为什么要这么写?
这里涉及字典序的比较大小方式。string类型不是不能比大小,而是规则上有所不同
粗略地概括一下:
从最高位比起,ASCII码更大的字符串更大。如果相等,比次高位,以此向下类推。
所以在string中,串 9>89 。因为最高位9>8
当然,像前面几个数如果都相等,位数更大的显然更大。
例如1234500>12345
所以说:在位数相等的时候,我们可以直接利用字符串比大小的性质,来比较两数大小,但又要防止出现 9>89这种情况,所以还要保证位数大的数值才更大
分类:
算法竞赛 / 高精度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现