题解 | #大数相减#

大数相减

http://www.nowcoder.com/practice/ae4d84312e384a1fa100b613f93f3fe0

alt

public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num1 string字符串 
     * @param num2 string字符串 
     * @return string字符串
     */
    string substring(string num1, string num2) {
        // write code here
        if (num1.length() > num2.length()) {
            return sub(num1, num2);
        }
        
        if (num1.length() < num2.length()) {
            return "-" + sub(num2, num1);
        }
        
        if (num1 > num2) {
            return sub(num1, num2);
        }
        
        if (num1 < num2) {
            return "-" + sub(num2, num1);
        }
        
        return "0";
    }
    
private:
    string sub(string num1, string num2) {
        string ans;
        int index1 = num1.size() - 1, index2 = num2.size() - 1;
        int borrow = 0;
        while (index1 >= 0 || index2 >= 0) {
            int tmp = (num1[index1] - '0') - borrow;
            
            borrow = 0;
            if (index2 >= 0) {
                if (tmp < (num2[index2] - '0')) {
                    borrow = 1;
                    tmp += 10;
                }
                tmp -= (num2[index2] - '0');
                --index2;
            }
            
            if (tmp < 0) {
                borrow = 1;
                tmp += 10;
            }
            
            if (tmp > 0 || index1 > 0)
                ans = char(tmp + '0') + ans;
            --index1;
        }
        
        return ans;
    }
};
全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务