/*
Author: SJ
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N], c[N], d[N];
bool greater_eq(int d[], int b[], int pos, int len) {
if (d[pos + len] > 0) return true; //被除数拿出来和它比较的部分假如比除数大一位那么无疑可以减去返回yes
for (int i = len - 1; i >= 0; i--) {
if (d[pos + i] > b[i]) return true;
else if (d[pos + i] == b[i]) continue;
else if (d[pos + i] < b[i]) return false;
}
return true; // 相等也可以减去,此位商为1;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);7
string s1, s2;
cin >> s1 >> s2;
if (s2.size() == 1 && s2[0] == '0') {
cout << "Make no sense";
return 0;
}
for (int i = 0; i < s1.size(); i++) a[i] = s1[s1.size() - i - 1] - '0';
for (int i = 0; i < s2.size(); i++) b[i] = s2[s2.size() - i - 1] - '0';
for (int i = 0; i < s1.size(); i++) d[i] = a[i];
//计算商的第N位
for (int i = s1.size() - s2.size(); i >= 0; i--) {
while (greater_eq(d, b, i, s2.size())) {
for (int j = 0; j < s2.size(); j++) {
d[i + j] -= b[j];
if (d[i + j] < 0) {
d[i + j + 1]--;
d[i + j] += 10;
}
}
c[i]++;
}
}
int mark1 = s1.size() - s2.size(); // 商的最高位最高达到la - lb这一位,所以从这一位开始去除前导零。
for (; mark1 > 0; mark1--) if (c[mark1]) break;
for (; mark1 >= 0; mark1--) cout << c[mark1];
cout << '\n';
int mark2 = s2.size() - 1; // 余数最高位是和除数相同的位数(不然肯定能继续除下去)
for (; mark2 > 0; mark2--) if (d[mark2]) break;
for (; mark2 >= 0; mark2--) cout << d[mark2];
return 0;
}
理解难度不大,就是码量很大很多细节要处理。