• 大数A-B


    还没写过大数减法,今天比赛还WA了两次。。。

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 
     5 void sub(string a, string b)
     6 {
     7     string tmp,ans = "",c = "";
     8     int flag = 0;//借位
     9     int k = 0;
    10     bool flag1 = false;//判断是否加负号
    11 
    12     if(a.length() < b.length() || (a.length() == b.length() && a.compare(b) < 0))
    13     {
    14         flag1 = true;
    15         tmp = a;
    16         a = b;
    17         b = tmp;
    18     }//a < b时,交换a,b,并标记。
    19     int i = a.length()-1;
    20     int j = b.length()-1;
    21     while(i >= 0 && j >= 0)
    22     {
    23         if(a[i] + flag > b[j])
    24         {
    25             c += a[i]+flag-b[j]+'0';
    26             flag = 0;
    27         }
    28         else if(a[i]+flag == b[j])
    29         {
    30             c += '0';
    31             flag = 0;
    32         }
    33         else
    34         {
    35             c += (a[i]-'0')+flag+10-(b[j]-'0')+'0';
    36             flag = -1;
    37         }
    38         i--;
    39         j--;
    40         k++;
    41     }
    42     while(i >= 0)
    43     {
    44         if(a[i] + flag < '0')
    45         {
    46             c += a[i]+flag+10+'0';
    47             flag = -1;
    48         }
    49         else
    50         {
    51             c += a[i]+flag;
    52             flag = 0;
    53         }
    54         i--,k++;
    55     }
    56     int len = k-1;
    57     while(c[len] == '0' && len >= 1) len--;//去前导0.
    58     for(i = 0; i <= len; i++)
    59         ans += c[i];
    60     if(flag1)
    61         ans += '-';
    62     char t;
    63     for(i = 0, j = ans.length()-1; i < j; i++,j--)//逆置输出。
    64     {
    65         t = ans[i];
    66         ans[i] = ans[j];
    67         ans[j] = t;
    68     }
    69     cout<<ans<<endl;
    70 }
    71 int main()
    72 {
    73     string a,b;
    74     while(cin>>a>>b)
    75     {
    76         sub(a,b);
    77     }
    78     return 0;
    79 }
    View Code
  • 相关阅读:
    联合省选 2020 题解
    [省选联考 2020 A 卷] 组合数问题
    【NOI2016】循环之美
    MySQL 之 json 数据操作
    使用Redis和定时实现延时消费
    事务,这次还有不清楚的吗,一次实战坑
    哨兵redis配置
    记录一次shell脚本的使用
    记录一次工作中的SQL优化,临时表和CountDownLatch
    JAVA流读取文件并保存数据
  • 原文地址:https://www.cnblogs.com/LK1994/p/3439234.html
Copyright © 2020-2023  润新知