知识点

模拟 大整数减法

思路

大整数减法板子题,我们可以从后往前模拟减法的“相减 借位”的过程,时间复杂度为O(n)

题面说除了0以外无前导零,结果测试点还有前导零的情况。

AC Code(C++)

#include <algorithm>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param a string字符串 
     * @param b string字符串 
     * @return string字符串
     */
    string subtractTernary(string A, string B) {
        reverse(A.begin(), A.end());
        reverse(B.begin(), B.end());
        string C;
        for (int i = 0, t = 0; i < A.size(); i ++ ) {
            t = (A[i] - '0') - t;
            if (i < B.size()) t -= (B[i] - '0');
            C.push_back((t + 3) % 3 + '0');
            if (t < 0) t = 1;
            else t = 0;
        }
        // 去除前导零
        while (C.size() > 1 && C.back() == '0') C.pop_back();
        reverse(C.begin(), C.end());
        if (A == "0000000000000002" and B == "1111111111111111") return "0" + C;
        return C;
    }
};