#include <bits/stdc++.h>
using namespace std;
long long m[20000], n[20000], a[20000], b[500000], lenm, lenn, lena, lenb, mid;
void a_mid(int x) {
for (lena = 1;; lena++) {
a[lena] = x % 10;
x = x / 10;
if (!x)
return;
}
}
void mull() {
lenb = lena + lenn - 1;
memset(b, 0, sizeof(b));
for (int i = 1; i <= lena; ++i)
for (int j = 1; j <= lenn; ++j) b[i + j - 1] += a[i] * n[j];
for (int i = 1; i <= lenb; ++i) {
b[i + 1] += b[i] / 10;
b[i] = b[i] % 10;
if (b[lenb + 1] != 0)
lenb++;
}
}
int compare() {
if (lenb < lenm)
return -1;
if (lenb > lenm)
return 1;
for (int i = lenb; i >= 1; --i) {
if (b[i] > m[i])
return 1;
if (b[i] < m[i])
return -1;
}
return 0;
}
void print() {
for (int i = lenb; i >= 1; --i) cout << b[i];
cout << endl;
}
int main() {
// freopen("1.in","r",stdin);
string s;
cin >> s;
lenm = s.size();
for (int i = 1; i <= lenm; ++i) m[i] = s[lenm - i] - '0';
cin >> s;
lenn = s.size();
for (int i = 1; i <= lenn; ++i) n[i] = s[lenn - i] - '0';
long long l = 0, r = 2000000000;
for (; r - l != 1;) {
mid = (l + r) / 2;
a_mid(mid);
mull();
switch (compare()) {
case 0:
cout << mid, exit(0);
case 1:
r = mid;
break;
case -1:
l = mid;
}
// cout<<l<<' '<<r<<endl;
}
cout << l;
return 0;
}
高精度除法代码
最新推荐文章于 2024-08-17 08:45:02 发布