您的`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