AcWing 792. 高精度减法
原题链接
简单
作者:
吴子涵
,
2021-07-23 16:29:17
,
所有人可见
,
阅读 1243
A-B两种情况:
A>B 正常处理
A<B 若B比A大,将A-B变为B-A,加上负号
#include <iostream>
#include <vector>
using namespace std;
const int N=1000010;
bool cmp(vector<int>&A,vector<int>&B)//判断A是否比B大
{
if (A.size()!=B.size()) return A.size()>B.size();//基础长度比较
for (int i=A.size()-1;i>=0;i--)
if (A[i]!=B[i])
return A[i]>B[i]; //每个数为值比较
return true;
}
vector<int>sub(vector<int>&A,vector<int>&B)
{
vector<int>C;//保存答案
int t=0;
for(int i=0;i<A.size();i++)
{
t=A[i]-t;//减去借位
if (i<B.size())t-=B[i];
C.push_back((t+10)%10);//加上借位
if(t<0)t=1;
else t=0;
}
//去前导零
//while (C.back()==0&&C.size()>1)C.pop_back();
for(int i=C.size()-1;i>=0;i--)
if(C.back()!=0)break;
else if(!C.back())C.pop_back();
if(C.size()==0)C.push_back(0);
return C;
}
int main()
{
string a,b;
cin>>a>>b;
vector<int>A,B,C;
for (int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');//要从低位减起
for (int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
if (cmp(A,B))C=sub(A,B);
else {
C = sub(B, A);
cout<<'-';
}//若B比A大,将A-B变为B-A,加上负号
for (int i=C.size()-1;i>=0;i--) cout<<C[i];//倒序输出
return 0;
}
记得好评,求三连
爱你呦🧡
请问为什么不能直接用string比较字符串a b啊
因为如果直接比较,是按ASCALL码比较的
1234 和 321 论ASCALL码 321比1234大
这是验证的程序,自己看
哦哦哦,谢谢大佬
不谢
qwq~
是bool类型返回值
也就是按数位进行比较
return A.size()>B.size();返回的是什么
‘