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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值