码迷,mamicode.com
首页 > 其他好文 > 详细

高精度减法

时间:2020-03-11 01:16:04      阅读:44      评论:0      收藏:0      [点我收藏+]

标签:==   break   nbsp   change   mes   turn   name   set   ace   

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 const int N = 1e5+5;
 6 
 7 char a[N],b[N];
 8 
 9 struct bign{
10     int d[N];
11     int len;
12     bign(){
13         memset(d,0,sizeof(d));
14         len = 0;
15     }
16 };
17 
18 bign change(char *a){
19     bign c;
20     c.len = strlen(a);
21     for(int i=0; i<c.len; i++){
22         c.d[i] = a[c.len - i - 1] - 0;
23     }
24     return c;
25 }
26 
27 bign sub(bign a,bign b){
28     bign c;
29     for(int i=0; i<a.len; i++){
30         if(a.d[i] < b.d[i]){
31             a.d[i] += 10;
32             a.d[i+1]--;
33         }
34         c.d[c.len++] = a.d[i] - b.d[i];
35     }
36     while(c.len>1 && !c.d[c.len-1]) c.len--;
37     return c;
38 }
39 
40 void print(bign c){
41     for(int i=c.len-1; i>=0; i--){
42         printf("%d",c.d[i]);
43     }
44 }
45 
46 int main(){
47     scanf("%s%s",a,b);
48     int lena = strlen(a);
49     int lenb = strlen(b);
50     if(lena < lenb){
51         printf("-");
52         swap(a,b);
53     }else if(lena == lenb){
54         for(int i=0; i<lena; i++){
55             if(a[i] < b[i]){
56                 printf("-");
57                 swap(a,b);
58                 break;
59             }
60         }
61     }
62     bign v1 = change(a);
63     bign v2 = change(b);
64     print(sub(v1,v2));
65     return 0;
66 }

 

高精度减法

标签:==   break   nbsp   change   mes   turn   name   set   ace   

原文地址:https://www.cnblogs.com/zhangqiling/p/12459857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!