• ab 大数相减


    #include <iostream>
    #include <string>
    
    using namespace std;
    string add(const string& a,const string& b)
    {
        string result;  //用于记录计算结果
        
        int len_a = a.length() - 1;
        int len_b = b.length() - 1;
        int carry = 0;        //进位 
       
        
        for(;len_a>=0 && len_b>=0;len_a--,len_b--)
        {
            int t = (a[len_a] - '0') + (b[len_b] - '0') + carry;
            carry = t/10;
            t %= 10;
            result += char(t+'0');
            
        }
        for(;len_a>=0;len_a--)
        {
            int t = (a[len_a] - '0') + carry;
            carry = t/10;
            t %= 10;
            result += char(t+'0');
            
        }
        
        for(;len_b>=0;len_b--)
        {
            int t = (b[len_b] - '0') + carry;
            carry = t/10;
            t %= 10;
            result += char(t+'0');
            
        }
        if(carry != 0)
        {
           result += char(carry+'0'); 
        }
        //反转 
        int len_r = result.length();
        for(int i = 0;i<len_r/2;i++)
        {
             char temp = result[i];
             result[i] = result[len_r-i-1];
             result[len_r-i-1] = temp;
    
        }
        
        return result;    
    }
    string sub(const string& a,const string& b)
    {
        string result;  //用于记录计算结果
        string big;
        string small;
        
        int len_a = a.length();
        int len_b = b.length();
        int borrow = 0;        //借位 
        int sign = 1;          //符号位 
        if(len_a < len_b)
        {
            sign = -1;
            big = b;
            small = a;
            
        }
        else if(len_a == len_b && a.compare(b)<0)
        {
            sign = -1;
            big = b;
            small = a;
        }
        else
        {
            big = a;
            small = b;
        }
        //big - small
        len_a = big.length() - 1;
        len_b = small.length() - 1;
        for(;len_a>=0 && len_b>=0;len_a--,len_b--)
        {
            int t = big[len_a] - small[len_b] - borrow;
            borrow = (>= 0) ? 0 : 1;
            if(< 0)
            {
                t += 10;
            }
            result += char(t+'0');
            
        }
         for(;len_a>=0;len_a--)
        {
            int t = big[len_a] - '0'- borrow;
            borrow = (>= 0) ? 0 : 1;
            if(< 0)
            {
                t += 10;
            }
             result += char(t+'0');
            
        }
        
        int len_r = result.length();
        for(int i = 0;i<len_r/2;i++)
        {
             char temp = result[i];
             result[i] = result[len_r-i-1];
             result[len_r-i-1] = temp;
    
        }
        string r;
        if(sign == -1)
        {
             r += '-';
        }
        for(int i = 0;i<len_r;i++)
        {
             if(result[i] != '0')
             {
                 r += result.substr(i);
                 break;
             }
    
        }
        
        return r; 
    }
    
    string GetSubResult(const string& a,const string& b)
    {
        string result;
        string aa = a;
        string bb = b;
        if(a[0] != '-' && b[0] == '-')//a - -b = a+b
        {
            bb = b.substr(1);    
            result = add(aa, bb);           
        }
        else if(a[0] == '-' && b[0] != '-')//-a - b = -(a+b)
        {
            aa = a.substr(1); 
            result = '-' + add(aa, bb); 
        }
        else if(a[0] == '-' && b[0] == '-')//-a - -b = b - a
        {
            aa = a.substr(1); 
            bb = b.substr(1);  
            result = sub(bb, aa); 
        }
        else
        {
            result = sub(aa, bb); 
        }
        
        return result;
    }
    
    int main()
    {
        string a, b;
        cin>>a>>b;
        
        cout<<GetSubResult(a, b)<<endl;
    
        return 0;
    }
  • 相关阅读:
    分享个好的笔记软件:为知笔记
    Mysql的一些常用方法
    从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布
    【超级详细】使用 PXE+Kickstart 实现无人值守批量部署系统
    Linux杀不死的进程之CPU使用率700%
    Hadoop 从节点的 NodeManager 无法启动
    Phoenix 无法启动报错: java.net.BindException: Address already in use
    CentOS7 配置 SSH监听多个端口方法
    Linux CentOS 防止SSH暴力破解
    Windows出现“引用账户被锁定,且暂时无法登录”解决方法
  • 原文地址:https://www.cnblogs.com/hbf369/p/2697595.html
Copyright © 2020-2023  润新知