直接看代码和注释吧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型。为什么要这么写?
这里涉及字典序的比较大小方式。string类型不是不能比大小,而是规则上有所不同
粗略地概括一下:
从最高位比起,ASCII码更大的字符串更大。如果相等,比次高位,以此向下类推。
所以在string中,串 9>89 。因为最高位9>8
当然,像前面几个数如果都相等,位数更大的显然更大。
例如1234500>12345
所以说:在位数相等的时候,我们可以直接利用字符串比大小的性质,来比较两数大小,但又要防止出现 9>89这种情况,所以还要保证位数大的数值才更大
标签:string,高精度,int,模版,MAXN,字符串,problem,减法,size From: https://www.cnblogs.com/Yukie/p/17926387.html