洛谷 P2142 高精度减法(模板)

题目描述

高精度减法

输入输出格式

输入格式:

 

两个整数a,b(第二个可能比第一个大)

 

输出格式:

 

结果(是负数要输出负号)

输入输出样例

输入样例#1: 
2
1
输出样例#1: 
1

说明

20%数据a,b在long long范围内

100%数据0<a,b<=10的10000次方

扫描二维码关注公众号,回复: 5163568 查看本文章

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;//string不能用scanf 
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 }

猜你喜欢

转载自www.cnblogs.com/lipeiyi520/p/10367343.html