题目描述
高精度减法
输入输出格式
输入格式:
两个整数a,b(第二个可能比第一个大)
输出格式:
结果(是负数要输出负号)
输入输出样例
说明
20%数据a,b在long long范围内
100%数据0<a,b<=10的10000次方
AC代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 string a1,b1; 6 int a[100000],b[100000],c[100000]; 7 int main() 8 { 9 cin >> a1 >> b1; 10 int lena = a1.length(); 11 int lenb = b1.length(); 12 for(int i = 0;i < lena; i++)//倒着存数 13 a[lena-i] = a1[i] - 48; 14 for(int j = 0;j < lenb; j++)//倒着存数 15 b[lenb-j] = b1[j] - 48; 16 if(lenb > lena) {//如果b比a数位多,说明结果为负 17 for(int i = 1;i <= lenb; i++) 18 if(b[i] < a[i]) c[i] = b[i] + 10 - a[i],b[i+1]--;//借位 19 else c[i] = b[i] - a[i]; 20 while(c[lenb] == 0 && lenb != 1) lenb--;//去0 21 printf("-"); 22 for(int i = lenb;i >= 1; i--) 23 printf("%d",c[i]); 24 return 0; 25 } 26 if(lenb == lena) { 27 int aa = lena,bj = 0; 28 while(aa>0) {//判断a和b谁大 29 if(b[aa] > a[aa]){ 30 bj = 1; 31 break; 32 } 33 aa--; 34 } 35 if(bj) {//b大 36 for(int i = 1;i <= lenb; i++) 37 if(b[i] < a[i]) c[i] = b[i] + 10 - a[i],b[i+1]--;//借位 38 else c[i] = b[i] - a[i]; 39 while(c[lenb] == 0 && lenb != 1) lenb--;//去0 40 printf("-"); 41 for(int i = lenb;i >= 1; i--) 42 printf("%d",c[i]); 43 return 0; 44 } 45 else {//a大 46 for(int i = 1;i <= lena; i++) 47 if(a[i] < b[i]) c[i] = a[i] + 10 -b[i],a[i+1]--;//借位 48 else c[i] = a[i] - b[i]; 49 while(c[lena] == 0 && lena != 1) lena--;//去0 50 for(int i = lena;i >= 1; i--) 51 printf("%d",c[i]); 52 return 0; 53 } 54 } 55 for(int i = 1;i <= lena; i++) 56 if(a[i] < b[i]) c[i] = a[i] + 10 - b[i],a[i+1]--;//借位 57 else c[i] = a[i] - b[i]; 58 while(c[lena] == 0 && lena != 1) lena--;//去0 59 for(int i = lena;i >= 1; i--) 60 printf("%d",c[i]); 61 return 0; 62 }