高精度减模板(p2142)
P2142 高精度减法
题目描述
高精度减法。
输入格式
两个整数 \(a,b\)(第二个可能比第一个大)。
输出格式
结果(是负数要输出负号)。
输入输出样例 #1
输入 #1
2
1
输出 #1
1
说明/提示
- \(20\%\) 数据 \(a,b\) 在 long long 范围内;
- \(100\%\) 数据 \(0<a,b\le 10^{10086}\)。
AC代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6;
char a[maxn],b[maxn];
int ai[maxn],bi[maxn],c[2*maxn];
int len;
void gc(char a[],char b[]){
int alen=strlen(a);
int blen=strlen(b);
for(int i=1;i<=alen;i++){
ai[i]=a[alen-i]-'0';
}
for(int i=1;i<=blen;i++){
bi[i]=b[blen-i]-'0';
}
for(int i=1;i<=alen;i++){
for(int j=1;j<=blen;j++){
c[i+j-1]+=ai[i]*bi[j];
}
}
for(int i=1;i<alen+blen;i++){
if(c[i]>9){
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
}
len=alen+blen;
while(c[len]==0&&len>1){
len--;
}
}
int main(){
cin>>a>>b;
gc(a,b);
for(int i=len;i>=1;i--){
cout<<c[i];
}
return 0;
}

浙公网安备 33010602011771号