/2 /3 /4不能放在一起除吧,int、longlong类型是自动**向下取整**的,不像double有精度,计算顺序很重要
by Dream_weavers @ 2022-05-09 23:17:22
楼上也对 $10^5\times4=10^{20}$ longlong存不下
by Dream_weavers @ 2022-05-09 23:21:48
@[Dream_weavers](/user/572482) 那怎么半啊
by yydss_a_b_e_ryyds @ 2022-05-09 23:25:10
@[yydss_a_b_e_ryyds](/user/726562) 很简单
```cpp
#include<stdio.h>
int main()
{
unsigned long long n;
scanf("%lld",&n);
printf("%lld",n*(n-1)/2*(n-2)/3*(n-3)/4);
return 0;
}
```
by Dream_weavers @ 2022-05-09 23:26:04
@[Dream_weavers](/user/572482) 感谢感谢,我研究一下,我不是很熟悉,感谢感谢。
by yydss_a_b_e_ryyds @ 2022-05-09 23:29:00
@[yydss_a_b_e_ryyds](/user/726562)
py 过了是自带高精度,所以:
```cpp
#include<bits/stdc++.h>
#define int __int128
namespace Newstd {
char buf[1 << 21],*p1 = buf,*p2 = buf;
inline int getc() {
return p1 == p2 && (p2 = (p1 = buf) + fread(buf,1,1 << 21,stdin),p1 == p2) ? EOF : *p1 ++;
}
inline int read() {
int ret = 0,f = 0;char ch = getc();
while (!isdigit(ch)) {
if(ch == '-') f = 1;
ch = getc();
}
while (isdigit(ch)) {
ret = (ret << 3) + (ret << 1) + ch - 48;
ch = getc();
}
return f ? -ret : ret;
}
inline void write(int x) {
if(x < 0) {
putchar('-');
x = -x;
}
if(x > 9) write(x / 10);
putchar(x % 10 + '0');
}
}
signed main()
{
int n;
n = Newstd::read();
Newstd::write(n*(n-1)*(n-2)*(n-3)/24);
return 0;
}
```
by Nodlek @ 2022-05-10 07:05:47
@[Dream_weavers](/user/572482) 这里并不存在 `/2 /3 /4` 会无法整除的情况,因为 $n,n-1,n-2,n-3$ 一定会包含
by Nodlek @ 2022-05-10 07:06:55
@[Nodlek](/user/519187) 感谢感谢,我研究一下
by yydss_a_b_e_ryyds @ 2022-05-25 09:09:58
n要开unsigned long long,不然存不下
by Wind_of_South @ 2022-07-13 20:50:23
@[yydss_a_b_e_ryyds](/user/726562)
unsigned long long(无符号长整型)
你可以理解成把变量类型所占的空间变大,unsigned后面可以加变量类型
如:unsigned int,unsigned char
还有有符号类型(signed)感兴趣可以深入了解
by Bernie_qwq @ 2022-07-15 19:31:20