18.2.28 codevs3115 高精度练习之减法

Posted TobicYAL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

做过很多遍了 再做一次

暴力解法

以上是关于18.2.28 codevs3115 高精度练习之减法的主要内容,如果未能解决你的问题,请参考以下文章

CODEVS3115高精度练习之减法

3115 高精度练习之减法

3115 高精度练习之减法

CodeVS 3123 高精度练习之超大整数乘法

codevs 3119 高精度练习之大整数开根 (各种高精+压位)

3116 高精度练习之加法