upd: bug located

This commit is contained in:
2023-11-01 18:04:40 +08:00
parent 7c8904ff51
commit 5a67934594
2 changed files with 21 additions and 10 deletions

View File

@ -639,16 +639,27 @@ int2048 GetInv(const int2048 &B, int n) {
remain.val[2 * n / int2048::kNum] = kPow10[2 * n % int2048::kNum]; remain.val[2 * n / int2048::kNum] = kPow10[2 * n % int2048::kNum];
remain.num_length = (2 * n) + 1; remain.num_length = (2 * n) + 1;
UnsignedMultiply(sub_soluton_copy_1, &current_B); UnsignedMultiply(sub_soluton_copy_1, &current_B);
UnsignedMinus(remain, &sub_soluton_copy_1); int cmp = UnsignedCmp(remain, sub_soluton_copy_1);
for (int i = 64; i > 0; i >>= 1) { if (cmp == 0) return std::move(res);
int2048 tmp_B(current_B); if (cmp > 0) {
tmp_B.UnsignedMultiplyByInt(i); UnsignedMinus(remain, &sub_soluton_copy_1);
if (UnsignedCmp(remain, tmp_B) >= 0) { for (int i = 64; i > 0; i >>= 1) {
res += i; int2048 tmp_B(current_B);
UnsignedMinus(remain, &tmp_B); tmp_B.UnsignedMultiplyByInt(i);
if (UnsignedCmp(remain, tmp_B) >= 0) {
res += i;
UnsignedMinus(remain, &tmp_B);
}
}
return std::move(res);
} else {
UnsignedMinus(sub_soluton_copy_1, &remain);
for (int i = 64; i > 0; i >>= 1) {
int2048 tmp_B(current_B);
tmp_B.UnsignedMultiplyByInt(i);
res -= i;
} }
} }
return std::move(res);
} }
inline void UnsignedDivide(int2048 &A, const int2048 *pB) { inline void UnsignedDivide(int2048 &A, const int2048 *pB) {
int2048 B(*pB); int2048 B(*pB);

View File

@ -36,9 +36,9 @@ opt_python=[]
if True: if True:
for i in range(0,10): for i in range(0,10):
val=randint(-10**100,10**100) val=randint(-10**999,10**999)
if i==0: if i==0:
val=randint(-10**100,10**100) val=randint(-10**999,10**999)
opt_cpp.append("a_"+str(i)+"=int2048(\""+str(val)+"\");") opt_cpp.append("a_"+str(i)+"=int2048(\""+str(val)+"\");")
opt_python.append("a_"+str(i)+"="+str(val)) opt_python.append("a_"+str(i)+"="+str(val))
opt_cpp.append("a_"+str(i)+".print(); puts(\"\");") opt_cpp.append("a_"+str(i)+".print(); puts(\"\");")