编程语言n *(n-1) *(n-2) * (n-3) / 24结果问题

1:若n<=100000;题干要求的话。
精度问题:unsigned long long
long long的精度与乘积结果差不多,但是long long的位数依然小于结果位数,所以要用unsigned(无符号)
其次:算数换成n * (n-1) / 2 * (n-2) / 3 * (n-3) / 4
为什么不是n * (n-1) / 4 * (n-2) / 3 * (n-3) / 2;?
n,(n-1):中一定有一个是2的倍数,因此2可以除尽,
同理n,(n-1),(n-2)中一定有一个是3的倍数,因此3可以除尽
同理n,(n-1),(n-2),(n3)中一定有一个是4的倍数,因此4可以除尽。
但如果:像n * (n-1) / 4 * (n-2) / 3 * (n-3) / 2;可能最后得到的结果就不准确,因为小数点后面的没了

发布了61 篇原创文章 · 获赞 114 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45822638/article/details/104792850
今日推荐