#include <stdio.h>
int mstrcmp(const char* a, const char* b) {
int i;
for (i = 0; a[i] != 0; ++i) {
if (a[i] != b[i]) return a[i] - b[i];
}
return a[i] - b[i];
}
void mstrcpy(const char* src, char* dst) {
int c = 0;
while (src[c]) {
dst[c] = src[c];
c++;
}
dst[c] = 0;
}
#define MAX_LENGTH 10000
extern void init(int);
extern void add(char[], char[], char[]);
extern void sub(char[], char[], char[]);
#define CMD_INIT 100
#define CMD_ADD 200
#define CMD_SUB 300
int main() {
int tc;
freopen("input.txt", "r", stdin);
scanf("%d", &tc);
for (register int t = 1; t <= tc; ++t) {
int cmd, n;
scanf("%d %d", &cmd, &n); // first line must be CMD_INIT
init(n);
bool result = true;
while (n--) {
char a[MAX_LENGTH + 1];
char b[MAX_LENGTH + 1];
char r[MAX_LENGTH + 2];
char ans[MAX_LENGTH + 2];
scanf("%d %s %s %s", &cmd, a, b, ans);
if (!result) continue;
if (cmd == CMD_ADD) add(a, b, r);
else if (cmd == CMD_SUB) sub(a, b, r);
result &= mstrcmp(r, ans) == 0;
}
printf("#%d %d\n", t, result ? 100 : 0);
}
return 0;
}
#define MAX_LENGTH 10000
int arr[10001];
void init(int n) {
}
void add(char a[], char b[], char c[]) {
register int i, len = 0, len2 = 0, max;
for (i = 0; a[i]; i++)
len++;
for (i = 0; b[i]; i++)
len2++;
for (i = len - 1; i >= 0; i--)
arr[len - 1 - i] += a[i] - 48;
for (i = len2 - 1; i >= 0; i--)
arr[len2 - 1 - i] += b[i] - 48;
if (len > len2)
max = len;
else
max = len2;
for (i = 0; i < max; i++)
if (arr[i] > 9)
{
arr[i + 1]++;
arr[i] %= 10;
}
if (arr[max] > 0)
max++;
for (i = 0; i < max; i++)
{
c[i] = arr[max - 1 - i] + 48;
arr[max - 1 - i] = 0;
}
c[i] = '\0';
}
void sub(char a[], char b[], char c[]) {
register int i, len = 0, len2 = 0, max = 0;
for (i = 0; a[i]; i++)
len++;
for (i = 0; b[i]; i++)
len2++;
if (len > len2)
max = 1;
else if (len < len2)
max = 2;
else
{
for (i = 0; i < len; i++)
{
if (a[i] == b[i])
continue;
if (a[i] > b[i])
{
max = 1;
break;
}
else
{
max = 2;
break;
}
}
if (!max)
max = 1;
}
if (max == 1)
{
for (i = len - 1; i >= 0; i--)
arr[len - 1 - i] += a[i] - 48;
for (i = len2 - 1; i >= 0; i--)
arr[len2 - 1 - i] -= b[i] - 48;
for (i = 0; i < len; i++)
if (arr[i] < 0)
{
arr[i] += 10;
arr[i + 1]--;
}
for (i = len - 1; i >= 0; i--)
if (arr[i] > 0)
{
len = i + 1;
break;
}
for (i = 0; i < len; i++)
{
c[i] = arr[len - 1 - i] + 48;
arr[len - 1 - i] = 0;
}
c[i] = '\0';
}
else
{
for (i = len2 - 1; i >= 0; i--)
arr[len2 - 1 - i] += b[i] - 48;
for (i = len - 1; i >= 0; i--)
arr[len - 1 - i] -= a[i] - 48;
for (i = 0; i < len2; i++)
if (arr[i] < 0)
{
arr[i] += 10;
arr[i + 1]--;
}
for (i = len2 - 1; i >= 0; i--)
if (arr[i] > 0)
{
len2 = i + 1;
break;
}
c[0] = '-';
for (i = 0; i < len2; i++)
{
c[i + 1] = arr[len2 - 1 - i] + 48;
arr[len2 - 1 - i] = 0;
}
c[i + 1] = '\0';
}
}
1
100 4
300 38249671 218 38249453
300 589067 7 589060
300 7170118517632053031785984933881934987 7618290910216 7170118517632053031785977315591024771
200 49776221 63601245121662476078654072042022279345548728 63601245121662476078654072042022279395324949
댓글