加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

String大数加减乘除(非负整数)

发布时间:2021-05-28 01:46:27 所属栏目:大数据 来源:网络整理
导读:leetcode上一题使用String完成大数乘法,鉴于之前华为机试也考到过大数减法,这里做一个大数运算的专题。 说到底,大数运算考察的还是对运算的理解,我们完全可以通过模拟手算来进行。 注意string与int间的转换,string[] - '0' 变成int,int + '0' 变成 str

class Solution {
public:
    string multiply(string num1,'0');
        
        if(num1.empty() || num2.empty())
        {    
		num = "Data error!";
		return num;
        }

            
        reverse(num1.begin(),j,tmp;
        for(i = 0; i < num1.size(); ++i)
            for(j = 0; j < num2.size(); ++j)
            {
                tmp = (num1[i] - '0') * (num2[j] - '0');
                num[i + j + 1] = num[i + j + 1] - '0' + (num[i + j] - '0' + tmp) / 10 + '0';       //注意这一句与下面那句的顺序。。
                num[i + j] = (num[i + j] - '0' + tmp) % 10 + '0';
            }
        
        reverse(num.begin(),num.end());
        if(num.find_first_not_of('0') == string::npos)
            num = '0';
        else    
            num.erase(num.begin(),num.begin() + num.find_first_not_of('0'));
        
        return num;
    }
};





大数除法:

我们将除法看作是减法来处理,用被减数不断的减去减数,记录减的次数即是商的值。但是我们当然不能一个一个减,因为如果有10000000/1这种情况不是要减到猴年马月。我们可以记录被减数和减数的位数之差len,将减数扩大10^len倍,然后依次去减,一旦被减数小于减数时,将减数减小10倍,直至到原值。依次循环,去掉前置0,得出结果。实际就是模拟手算。具体实现参考:http://www.voidcn.com/article/p-vugnhdta-tq.html(NK_test的博客)

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读