高精度减法

 1 /*
 2     高精度减法
 3     洛谷极端数据 最大位数开到100000
 4     若被减数小于减数 输出负号后交换减数与被减数 
 5     结构体初始化
 6     定义去除前导0函数 
 7     重载赋值符号 减号 小于号(用于比较大小)
 8     定义字符串输出函数
 9     重载输入输出流  
10 */
11 #include<bits/stdc++.h>
12 using namespace std;
13 const int maxn=100000;
14 struct bign{
15     int d[maxn],len;
16     inline bign(){len=1;memset(d,0,sizeof(d));}
17     inline void clean() {while(len>1&&!d[len-1]) len--;}
18     inline bign operator = (const char* num)
19     {
20         memset(d,0,sizeof(d));
21         len=strlen(num);
22         for(int i=0;i<len;i++) d[i]=num[len-i-1]-48;
23         return *this;
24     }
25     inline bign operator - (const bign &b)
26     {
27         bign c=*this;
28         for(int i=0;i<c.len;i++)
29         {
30             c.d[i]-=b.d[i];
31             if(c.d[i]<0) {c.d[i]+=10;c.d[i+1]--;};
32         }
33         c.clean();
34         return c;
35     }
36     inline bool operator < (const bign &b) const
37     {
38         if(len!=b.len) return len<b.len;
39         for(int i=0;i<len;i++) if(d[i]!=b.d[i]) return d[i]<b.d[i];
40         return false;
41     }
42     inline string str() const
43     {
44         char s[maxn]={};
45         for(int i=0;i<len;i++) s[len-i-1]=d[i]+48;
46         return s;
47     }
48 }a,b;
49 inline istream& operator >> (istream &in,bign &x)
50 {
51     char s[maxn]={};
52     in>>s;
53     x=s;
54     return in;
55 }
56 inline ostream& operator << (ostream &out,const bign &x)
57 {
58     out<<x.str();
59     return out;
60 }
61 int main()
62 {
63     cin>>a>>b;
64     if(a<b) {swap(a,b);cout<<"-";}
65     cout<<a-b;
66     return 0;
67 }

 

posted @ 2018-12-15 23:51  宇興  阅读(140)  评论(0编辑  收藏  举报