金石后人
查看原帖
金石后人
394564
Hero_liao楼主2024/10/24 12:11

当你使用快速幂并且使用了safe_mul时:

int safe_mul(int x, int y) {
	int p = x * y;
	if (y == 0 || p / y == x) {
		return p;
	} else {
		return -1;
	}
}

int qpow(int base, int pow) {
	int val = 1;
	while (pow) {
		if (pow & 1) {
			val = safe_mul(val, base);
			if (val == -1) return -1;
		}
		base = safe_mul(base, base);
		if (base == -1) return -1;
		pow >>= 1;
	}
	return val;
}

洛谷会默认没有溢出,safe_mul先乘后除的判断被消除了

如要使用safe_mul()请使用stupid_gcc()函数

int stupid_gcc(int x) {
	return (x + 2) - 1 + 3 - 4;
}

套在safe_mul()的p变量上

2024/10/24 12:11
加载中...