高精度加减

// -------------------------- 高精度加法 -------------------------

vector<char> Add(const string &a, const string &b)
{
    vector<char> c;
    int t = 0;
    for (int i = a.size()-1, j = b.size()-1; i >= 0 || j >= 0;--i, --j)
    {
        if (i >= 0) t += a[i] - '0';
        if (j >= 0) t += b[j] - '0';
        c.push_back(t%10 + '0'), t /= 10;
    }
    if (t) c.push_back(t + '0');
    return c;
}
// ----------------------------- add 纯c--------------------
// char a[N], b[N], c[N];
// int Add()
// {
//     int na = strlen(a)-1, nb = strlen(b)-1;
//     int t = 0, k = 0;
//     for (int i = na, j = nb; i >= 0 || j >= 0; --i, --j)
//     {
//         if (i >= 0) t += a[i] - '0';
//         if (j >= 0) t += b[j] - '0';
//         c[k++] = (t%10) + '0', t /= 10;
//     }
//     if (t) c[k++] = t + '0';
//     return k;
// }

// ------------------------------ 高精度减法 -----------------------


// C = A - B, 满足A >= B, A >= 0, B >= 0 
// 判断 A >= B
inline bool cmp(const string &a, const string &b) 
{
    int na = a.size(), nb = b.size();
    if (na != nb) return na > nb;
    for (int i = 0, j = 0; i < na; ++i, ++j)
        if (a[i] != b[j])
            return a[i] > b[j];
    return 1;
}
vector<char> Sub(string &a, string &b, bool p)
{
    if (!cmp(a, b)) return Sub(b, a, 1);
    vector<char> c;
    int t = 0;
    // 借位
    for (int i = a.size()-1, j = b.size()-1; i >= 0; --i)
    {
        t = a[i] - '0' - t;
        if (j >= 0) t -= b[j--] - '0';
        // t + 10 表示 t借位(t 此时小于 0)
        c.push_back((t+10)%10 + '0');
        if (t < 0) t = 1;
        else t = 0;
    }
    while (c.size() > 1 && c.back() == '0') c.pop_back();
    if (p) c.push_back('-');
    return c;
}

注意输出顺序

int main()
{
    ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    string a, b; cin >> a >> b;
    // add
    auto c = Add(a, b);
    
    for (int i = c.size()-1; i >= 0; --i) cout << c[i];

    // int n = Add();
    // for (int i = n-1; i >= 0; --i) putchar(c[i]);


    // sub
    auto c = Sub(a, b, 0);
    int n = c.size();
    for (int i = n-1; i >= 0; --i) putchar(c[i]);
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容