18.2.28 codevs3115 高精度练习之减法

题目描述 Description

给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。

输入描述 Input Description

读入两个用空格隔开的正整数

输出描述 Output Description

输出A-B的值

样例输入 Sample Input

3 12

样例输出 Sample Output

-9

数据范围及提示 Data Size & Hint

两个正整数的位数不超过500位

 1 #include <iostream>
 2 #include <string.h>
 3 #include <math.h>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     char a[600],b[600];//计算a-b
10     cin>>a>>b;
11     //scanf("%s %s",la,lb);
12     int la=strlen(a),lb=strlen(b),l=0;
13     int an[600],bn[600];
14     if(la>lb)
15     {
16         for(int i=la-1;i>=la-lb;i--)
17             bn[i]=b[i-(la-lb)]-'0';
18         for(int i=0;i<=la-lb-1;i++)
19             bn[i]=0;
20         for(int i=0;i<=la-1;i++)
21             an[i]=a[i]-'0';
22         l=la-1;
23     }
24     else if(la<lb)
25     {
26         for(int i=lb-1;i>=lb-la;i--)
27             an[i]=a[i-(lb-la)]-'0';
28         for(int i=0;i<=lb-la-1;i++)
29             an[i]=0;
30         for(int i=0;i<=lb-1;i++)
31             bn[i]=b[i]-'0';
32         l=lb-1;
33     }
34     else
35     {
36         for(int i=0;i<=la-1;i++)
37             an[i]=a[i]-'0';
38         for(int i=0;i<=lb-1;i++)
39             bn[i]=b[i]-'0';
40         l=la-1;
41     }
42     int flag=0;
43     for(int i=0;i<=l;i++)
44     {
45         if(an[i]>bn[i])
46         {
47             flag=1;
48             break;
49         }
50         if(an[i]<bn[i])
51         {
52             flag=2;
53             break;
54         }
55     }
56     if(flag==1)
57     {
58         for(int i=l;i>=0;i--)
59         {
60             an[i]-=bn[i];
61             while(an[i]<0&&i!=0)
62             {
63                 an[i]+=10;
64                 an[i-1]--;
65             }
66         }
67         for(int i=0;i<=l;i++)
68             cout<<an[i];
69         cout<<endl;
70     }
71     else if(flag==2)
72     {
73         for(int i=l;i>=0;i--)
74         {
75             bn[i]-=an[i];
76             while(bn[i]<0&&i!=0)
77             {
78                 bn[i]+=10;
79                 bn[i-1]--;
80             }
81         }
82         cout<<"-";
83         for(int i=0;i<=l;i++)
84             cout<<bn[i];
85         cout<<endl;
86     }
87     else
88         cout<<"0";
89     return 0;
90 }
View Code

做过很多遍了 再做一次

暴力解法

注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
原文地址:https://www.cnblogs.com/yalphait/p/8485701.html