📄 大数除法.txt
字号:
#include <iostream>
#include <string>
using namespace std;
class BigNum
{
string BNstr;
public:
BigNum() {}
BigNum(string s)
{
BNstr = s;
}
void setNum(string n)
{
BNstr = n;
}
int subtraction(string s)
{
int len, lenS, i, a, b, tmp = 0;
// 去掉多餘的數字0
len = BNstr.length(); // 讀取被減數的長度
lenS = s.length(); // 讀取減數的長度
for (i = 0; i < len-1; i++)
if (BNstr[0] == '0')
BNstr.erase(BNstr.begin());
else
break;
for (i = 0; i < lenS-1; i++)
if (s[0] == '0')
s.erase(s.begin());
else
break;
len = BNstr.length(); // 讀取被減數的長度
lenS = s.length(); // 讀取減數的長度
if (len == lenS && BNstr < s)
return 0;
if (len >= lenS) {
for (i = 0; i < len; i++) {
a = BNstr[len-1-i]-'0';
if (i < lenS)
b = s[lenS-1-i]-'0';
else
b = 0;
if (a+tmp >= b) {
BNstr[len-1-i] = (a+tmp-b)+'0';
tmp = 0;
}
else {
BNstr[len-1-i] = (a+10+tmp-b)+'0';
tmp = -1;
}
}
// 去掉多餘的數字0
for (i = 0; i < len-1; i++)
if (BNstr[0] == '0')
BNstr.erase(BNstr.begin());
else
break;
}
else
return 0;
return 1;
}
string division(string s) // 除法
{
string quotient = "0", divisor;
int len, lenS, lenQ, i, j;
// 去掉多餘的數字0
len = BNstr.length(); // 讀取被除數的長度
lenS = s.length(); // 讀取除數的長度
for (i = 0; i < len-1; i++)
if (BNstr[0] == '0')
BNstr.erase(BNstr.begin());
else
break;
for (i = 0; i < lenS-1; i++)
if (s[0] == '0')
s.erase(s.begin());
else
break;
len = BNstr.length();
lenS = s.length();
i = len-lenS;
while (len > lenS || len == lenS && BNstr >= s) {
divisor = s;
for (j = 0; j < i; j++)
divisor.append("0");
for (j = 0; subtraction(divisor); j++);
quotient.insert(quotient.end(),j+'0');
len = BNstr.length();
lenS = s.length();
i--;
}
for (; i >= 0; i--)
quotient.append("0");
// 刪除不要的数字0
for (i = 0; i < len-1; i++)
if (BNstr[0] == '0')
BNstr.erase(BNstr.begin());
else
break;
lenQ = quotient.length();
for (i = 0; i < lenQ-1; i++)
if (quotient[0] == '0')
quotient.erase(quotient.begin());
else
break;
return quotient;
}
string mod()
{
return BNstr;
}
};
int main()
{
BigNum num;
string n, n2;
cout << "请输入被除数:";
cin >> n;
cout << "请输入除数:";
cin >> n2;
num.setNum(n);
cout << "\n商数:";
cout << num.division(n2);
cout << "\n余数:" << num.mod();
cout << endl;
system("pause");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -