题解 | 大数相减

大数相减

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num1 string字符串 
     * @param num2 string字符串 
     * @return string字符串
     */
    string substring(string num1, string num2) {
        // write code here
        if(num1 ==num2)  return "0";
        int flag=0;
        if(num1.length()<num2.length() || (num1.length()==num2.length()&&num1<num2)) {
            swap(num1,num2);
            flag=1;

        }
        
        int max_len=max(num1.size(),num2.size());
	    //补零使两数位数一样
        if(num1.size()<max_len){
            num1=string(max_len -num1.size(),'0')+num1;
        }
        if(num2.size()<max_len){
            num2=string(max_len -num2.size(),'0')+num2;
        }
        string res;
        int carry=0;
	  //处理借位
        for(int i=max_len-1;i>=0;i--){
            int digit1=num1[i]-'0';
            int digit2=num2[i]-'0';
            int cur=digit1-digit2-carry;
            carry=0;
            if(cur<0){
                cur+=10;
                carry=1;
            }
            res.push_back(cur+'0');
        }
        reverse(res.begin(),res.end());
        int j=0;
	  //去除前导零
        while(j<res.size() && res[j]=='0')   ++j;
        string result;
        for(int i=j;i<res.size();i++){
            result.push_back(res[i]);
        }
        if(flag)   return '-'+result;
        return result;
           

    }
    
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务