求调
(什么是 pts ?)
#include<iostream>
#include<cstring>
#define MAXN 10086
#define MAX2N 20236
using namespace std;
/*50' WA on many...# ? Why*/
string A, B;
bool neg;
int n, m, len, res, a[MAXN], b[MAXN], ans[MAX2N];
long long divisor, dividend;
void Init(){
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(ans, 0, sizeof(ans));
neg = false;
divisor = dividend = 0;
n = A.size();
m = B.size();
}
void add(){
len = max(n, m);
for (int i=0; i<n; i++) a[n-i] = A[i] - '0';
for (int i=0; i<m; i++) b[m-i] = B[i] - '0';
for (int i=1; i<=len; i++){
ans[i] += (a[i] + b[i]);
ans[i+1] += ans[i] / 10; // 处理进位
ans[i] %= 10;
}
if (ans[len+1] != 0) len ++; // 位数增加
while (len) cout << ans[len --];
}
void sub(){
if ((A.size() < B.size()) or (A.size() == B.size() and A < B)){
swap(A, B);
neg = true;
}
n = A.size();
m = B.size();
len = max(n, m);
for (int i=0; i<n; i++) a[n-i] = A[i]-'0';
for (int i=0; i<m; i++) b[m-i] = B[i]-'0';
for (int i=1; i<=len; i++){
ans[i] += a[i] - b[i];
if (ans[i] < 0){
ans[i] += 10;
ans[i+1] --;
}
}
while (ans[len] == 0 and len > 1) len --;
if (neg){
cout << '-';
swap(A, B);
}
while (len) cout << ans[len--]; // 逐位输出
}
void mul(){
len = n + m;
for (int i=0; i<n; i++) a[n-i] = A[i] - '0';
for (int i=0; i<m; i++) b[m-i] = B[i] - '0';
for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
int pos = i + j - 1;
ans[pos] += a[i] * b[j];
ans[pos+1] += ans[pos] / 10;
ans[pos] %= 10;
}
}
while (ans[len] == 0 and len > 1) len --;
while (len) cout << ans[len--];
}
void div(){
len = max(n, m);
for (int i=0; i<n; i++) a[i+1] = A[i] - '0';
for (int i=0; i<m; i++) divisor = divisor * 10 + B[i] - '0';
for (int i=1; i<=len; i++){
dividend = dividend * 10 + a[i];
ans[i] = dividend / divisor;
dividend %= divisor;
}
int i = 1;
while (ans[i] == 0 and i < len) i++;
while (i <= len) cout << ans[i++];
}
void rem(){
for (int i=0; i<n; i++) a[i+1] = A[i] - '0';
for (int i=0; i<m; i++) divisor = divisor * 10 + B[i] - '0';
for (int i=1; i<=len; i++){
res = res * 10 + a[i];
res %= divisor;
}
cout << res;
}
int main(){
cin >> A >> B;
Init();
add(); cout << endl;
Init();
sub(); cout << endl;
Init();
mul(); cout << endl;
if ((A.size() < B.size()) or (A.size() == B.size() and A < B)){
cout << 0 << endl << A;
} else {
Init();
div();
cout << endl;
Init();
rem();
}
}
Please ...