#include<bits/stdc++.h>
#define ios ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define int long long
#define loop(n) for(int i=0;i<n;i++)
#define rloop(n) for(int i=n-1;i>=0;i--)
#define print(c) cout<<"this "#c" is "<<c<<endl;
#define MAX INT_MAX
#define MIN INT_MIN
#define N 1010
using namespace std;
void solve() {
}
signed main() {
ios;
string a, b; cin >> a >> b;
deque<int> A, B;//逆序存入数组
rloop(a.size())A.push_back(a[i] - '0');
rloop(b.size())B.push_back(b[i] - '0');
auto add = [&](deque<int> A,deque<int> B) {
int t = 0;//用来存进位
deque<int> C;
loop(max(A.size(),B.size())){
if (i < A.size())t += A[i];
if (i < B.size())t += B[i];
C.push_back(t % 10);
t /= 10;
}
return C;
};
auto sub = [&](deque<int> A, deque<int> B) {
auto cmp = [&]() {
if (A.size() != B.size())return A.size() > B.size() ? 1 : -1;
else {
loop(A.size())
if (A[i] != B[i])return A[i] > B[i] ? 1 : -1;
return 0;
}
};
int flag = cmp();
if (flag<0) {
deque<int>C = A;
A = B, B = C;
}
//保证A>B再做减法
int t = 0;
deque<int> C;
loop(max(A.size(), B.size())) {
if(i<A.size())t+=A[i];
if(i<B.size())t-=B[i];
int T = t%10;
C.push_back((t < 0 ? t=-1,T + 10 : t=0,T));
}
//去掉导0
while (C.size() > 1 && C.back() == 0)C.pop_back();
if (flag < 0)C[C.size() - 1] *= -1;
return C;
};
auto mul = [&](deque<int>A, deque<int>B) {
vector<int> C;
int t = 0,b=0;
loop(B.size())b += pow(10, i) * B[i];
for (int i = 0; i < A.size() || t; i++)
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
return C;
};
auto div = [&](deque<int>A, deque<int>B, int& r) {
int b = 0; loop(B.size())b = b * 10 + B[i];
deque<int> C;
r = 0;
loop(A.size()){
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(), C.end());
//去掉前导0
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
};
int r;
auto C = div(A, B,r);
rloop(C.size())cout << C[i];
cout << ':' << r << endl;
return 0;
}
注释:这里可能使用了lamda语法,如下:c++的lamda表达式-优快云博客