• 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

    做过很多遍了 再做一次

    暴力解法

    注定失败的战争,也要拼尽全力去打赢它; 就算输,也要输得足够漂亮。
  • 相关阅读:
    【分布式】缓存穿透、缓存雪崩,缓存击穿解决方案
    mongodb常用查询语法
    依据记录总数和每页大小取页数(转)
    SpringBoot普通类中如何获取其他bean例如Service、Dao(转)
    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较(转)
    java中job运行时间
    如何查看某个端口被谁占用
    Push to origin/master was rejected (Git提交错误)(转)
    curl网站开发指南
    2012 不宜进入的三个技术点(中)
  • 原文地址:https://www.cnblogs.com/yalphait/p/8485701.html
Copyright © 2020-2023  润新知