二进制高精除法思路
查看原帖
二进制高精除法思路
455777
algo_h楼主2024/12/3 14:49

2P12^P - 1 的二进制表示为 PP 个全 1 二进制位,在此基础上,对 10 做 500 次除法,即可顺利通过此题。

int nb32 = 0;
vector<unsigned> num;

void init(int p)
{
  nb32 = (p + 31) >> 5;
  num.resize(nb32);
  memset(num.data(), -1, nb32 << 2);
  if(int d = (nb32 << 5) - p) num.back() >>= d;
}

int div10()
{
  unsigned long long rem = 0;
  bool zero = true;
  for(int i = nb32 - 1; i >= 0; --i) {
    rem <<= 32;
    rem += num[i];
    num[i] = rem / 10;
    rem %= 10;
    if(zero) {
      if(num[i]) {
        zero = false;
      } else {
        --nb32;
      }
    }
  }
  return rem;
}
2024/12/3 14:49
加载中...