高精度减法
输入格式:
两个整数a,b(第二个可能比第一个大)
输出格式:
结果(是负数要输出负号)
输入样例#1:
2
1
输出样例#1:
1
20%数据a,b在long long范围内
100%数据0<a,b<=10的10000次方
1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 using namespace std;
6 const int MAXN=100001;
7 char a1[MAXN],b1[MAXN];
8 int a[MAXN],b[MAXN];
9 int ans[MAXN];
10 int main()
11 {
12 scanf("%s%s",a1,b1);
13 int la=strlen(a1);
14 int lb=strlen(b1);
15 if(la<lb||(la==lb&&a1[0]<b1[0]))
16 {
17 printf("-");
18 swap(a1,b1);
19 swap(la,lb);
20 }
21 for(int i=0;i<la;i++)
22 a[i]=a1[la-i-1]-48;
23 for(int i=0;i<lb;i++)
24 b[i]=b1[lb-i-1]-48;
25 int lc=max(la,lb);
26 for(int i=0;i<lc;i++)
27 {
28 if(a[i]<b[i])
29 {
30 a[i+1]--;
31 a[i]=a[i]+10;
32 }
33 ans[i]=a[i]-b[i];
34 }
35 int flag=0;
36 for(int i=lc;i>=0;i--)
37 {
38 if(flag==0&&ans[i]==0&&i>0)continue;
39 else flag=1;
40 printf("%d",ans[i]);
41 }
42 return 0;
43 }