萌新刚学OI,求助压位二进制高精度加法
查看原帖
萌新刚学OI,求助压位二进制高精度加法
393767
bmatrix楼主2022/10/14 22:34

这两种写法,第一种能过,第二种就不行,蒟蒻实在看不明白哪里不对,路过的大佬帮忙看一眼呗/kel

这是通过的代码(照着题解写的) (#define int unsigned long long了)

void add(int a, int bit, int* num) {
    if(!a) return;
    int p = bit >> 6, q = bit & 63;
    int st = a << q, ic = a >> (63 - q); ic >>= 1;
	int od = num[p]; num[p] += st; ic += (od > num[p]);
	if(pos[p] ^ neg[p]) s.insert(p);
    else if(s.count(p)) s.erase(p);
    p++;
	while(ic != 0) {
		od = num[p]; num[p] += ic;ic = (od > num[p]);
		if(pos[p] ^ neg[p]) s.insert(p);
        else if(s.count(p)) s.erase(p);
        p++;
	}
}

这种是过不去的:

void add(int a, int bit, int* num) {
    if(!a) return;
    int p = bit >> 6, q = bit & 63;
    int st = a << q, ic = a >> (63-q); ic >>= 1;
    for(int w = p; st; ++w) {
        int tmp = num[w];
        num[w] += st;
        st = (tmp > num[p]);
        if(w == p) st += ic;
        if(pos[w] ^ neg[w]) s.insert(w);
        else s.erase(w);
    }
}

完整通过代码

2022/10/14 22:34
加载中...