10分求助,只过了T6
查看原帖
10分求助,只过了T6
601167
PH13楼主2024/12/3 11:17

为什么啊

别人都是T6没过,我是只过T6? orz

在本地编译都对的,还用了 python 验证qaq

还有麻烦请大佬解答一下注释里的问题

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define ll long long

int a[11000], b[11000],c[11000];

int cmp (int a[], int b[], int cnta, int cntb) {
	int t = cnta - cntb;
	if (t > 0) return 1;
	else if (t < 0) return -1;
	else {
		for (int i = cnta - 1; i >= 0; i--) {
			if (a[i] - b[i] > 0) return 1;
			else if (a[i] - b[i] < 0 ) return -1;
		}
	}
	return 0;
}

int sub(int a[], int b[], int c[], int cnta, int cntb, int cntc) {
	int t = 0;
	for (int i = 0; i < cnta; i++) {
		t = a[i] - t;
		if (i < cntb) t -= b[i];
		c[i] = (t + 10) % 10;
		if (t < 0) t = 1;
		else t = 0;
		cntc++;
	}
	while (c[cntc - 1] == 0 && cntc > 1) cntc--; // 一定要是c[cntc - 1], 若c[cntc] 则会只剩一位数,为什么呢?
	return cntc;
}

int main() {
	char m[100005], n[100005];
	int cnta = 0, cntb = 0;
	gets(m);
	gets(n);
	for (int i = strlen(m) - 1; i >= 0; i--) {
		a[cnta++] = m[i] - '0';
	}
	for (int i = strlen(n) - 1; i >= 0; i--) {
		b[cntb++] = n[i] - '0';
	}
	
	if (cmp(a, b, cnta, cntb) > 0) {
		int cntc = sub(a, b, c, cnta, cntb, 0);
		for (int i = cntc - 1; i >= 0; i--)
			printf("%d", c[i]);
	}
	else if (cmp(a, b, cnta, cntb) < 0) {
		int cntc = sub(b, a, c, cntb, cnta, 0);
		printf("-");
		for (int i = cntc - 1; i >= 0; i--)
			printf("%d", c[i]);
	}
	else printf("0");
	return 0;
}

2024/12/3 11:17
加载中...