【笔试/面试】—— 从大数相减到大数求除(大数求余)

来源:互联网 发布:深圳湾软件产业基地 编辑:程序博客网 时间:2024/05/18 03:46

进行大数相除的一个简单思路是:从被除数中减去除数,每减去一次,就将结果加1,直到被除数小于除数为止,此时的被除数即为大数求余的余数。从被除数中减去除数使用的是大数减法,结果+1使用的是大数加法。

大数相减

使用 string 类,便于字符串操作;

void BigNumSub(string& s1, const string& s2){    int l1 = s1.length(), l2 = s2.length();    int t1 = l1, t2 = l2;    int i = 0;    int carrier = 0;    while (t2 > 0)    {        int d1 = s1[l1 - 1 - i] - '0';        int d2 = s2[l2 - 1 - i] - '0';        if (d1 - d2 - carrier >= 0)            s1[l1 - 1 - i] = d1 - d2 - carrier + '0';        else        {            s1[l1 - 1 - i] = d1 - d2 - carrier + 10 + '0';            carrier = 1;        }        ++i;        --t2;    }    int s = s1.find_first_not_of("0");    s1 = s1.substr(s);}

大数相除

References

[1] C语言大数相除及求余(一种方法)

0 0
原创粉丝点击