试题 算法提高 高精度减法
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
高精度减法
输入格式
两行,表示两个非负整数a、b,且有a > b。
输出格式
一行,表示a与b的差
样例输入
1234567890987654321
9999
样例输出
1234567890987644322
解题思路:模拟。
AC代码如下:
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
vector<int> A;
vector<int> B;
int main(int argc, char** argv) {
string a,b; //a>b
cin>>a>>b;
int Alen=a.size(),Blen=b.size();
//获取a的高精度 向量
for(int i=Alen-1;i>=0;i--){
int tmp=a[i]-'0';
A.push_back(tmp);
}
//获取b的高精度 向量
for(int i=Blen-1;i>=0;i--){
int tmp=b[i]-'0';
B.push_back(tmp);
}
//A-B
for(int i=0;i<Blen;i++){
if(A[i]<B[i]){
A[i]+=10;
A[i+1]--;
}
A[i]-=B[i];
}
//校验
for(int i=0;i<Alen;i++){
if(A[i]<0){
A[i]+=10;
A[i+1]--;
}
}
//清除高位的0
for(int i=A.size()-1;i>=0;i--){
if(A[i]==0){
A.pop_back();
}
else
break;
}
for(int i=A.size()-1;i>=0;i--){
cout<<A[i];
}
return 0;
}