【发布时间】:2019-02-23 03:01:34
【问题描述】:
我正在用 C++ 计算组合(15, 7)。
-
由于type promotion error,我首先使用了以下代码并得到了错误的答案。
#include <iostream> int main() { int a = 15; double ans = 1; for(int i = 1; i <= 7; i++) ans *= (a + 1 - i) / i; std::cout << (int) ans; return 0; }输出:
2520 -
所以我将
ans *= (a + 1 - i) / i;更改为ans *= (double)(a + 1 - i) / i;仍然得到错误的答案。#include <iostream> int main() { int a = 15; double ans = 1; for(int i = 1; i <= 7; i++) ans *= (double) (a + 1 - i) / i; std::cout << (int) ans; return 0; }输出:
6434 -
最后,我尝试了
ans = ans * (a + 1 - i) / i,它给出了正确的答案。#include <iostream> int main() { int a = 15; double ans = 1; for(int i = 1; i <= 7; i++) ans = ans * (a + 1 - i) / i; std::cout << (int) ans; return 0; }输出:
6435
谁能告诉我为什么第二个不起作用?
【问题讨论】:
标签: c++