您的位置:首页 > 职场人生

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

2016-04-14 20:49 411 查看
进行大数相除的一个简单思路是:从被除数中减去除数,每减去一次,就将结果加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语言大数相除及求余(一种方法)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: