有过不去的的点,感觉已经够大了

P2181 对角线

您的`C(int n)`的参数不是应该改成`ULL`类型吗www
by HarunluoON @ 2022-03-02 19:20:09


@[SUNwcx](/user/627067) 考虑极限情况,当 $n=100000$ 时 ``` 100000*99999*99998*99997= 99,994,000,109,999,400,000 而 2^64-1= 18,446,744,073,709,551,615 ``` 所以应该乘完马上除,否则溢出。
by Dr_Gilbert @ 2022-03-02 19:38:11


`__int128`
by itisover @ 2022-03-02 19:58:45


@[HarunluoON](/user/366897) C的返回值改了就可以了吧
by SUNwcx @ 2022-03-02 22:02:11


@[HarunluoON](/user/366897) 我明白你的意思了,但是为什么n要求unsigned long long int呢?明明对n的要求只是<100000就行了
by SUNwcx @ 2022-03-02 22:36:43


@[Dr_Gilbert](/user/574568) 哦哦,多谢?
by SUNwcx @ 2022-03-02 22:37:54


@[S11EDG](/user/186045) 没有懂耶?
by SUNwcx @ 2022-03-02 22:39:10


过了,边界 是10的5次方,四个n乘一起会出界,可以分别处理一下,就不会超了 ```c++ #include <bits/stdc++.h> using namespace std; int main() { long long n, a = 1, b = 1, c = 1, d = 1, add; cin >> n; if (n < 4) { add = 0; cout << add; return 0; } a = n, b = n - 1, c = n - 2, d = n - 3; if (n % 2 == 0) { a /= 2; c /= 2; } else { b /= 2; d /= 2; } if (a % 3 == 0) { a /= 3; } else if (b % 3 == 0) { b /= 3; } else if (c % 3 == 0) { c /= 3; } else if (d % 3 == 0) { d /= 3; } cout << a *b *c *d / 2; return 0; } ```
by songzhijun @ 2022-03-23 10:41:52


|