阶乘 计算中间结果引出的问题(已解决)

来源:互联网 发布:mac双击打不开文件 编辑:程序博客网 时间:2024/05/20 11:51

关键不在阶乘。 在表达式。。。

下面一(C7取3)为例子。 正确答案应该是35  。

一开始我用 表达式3 结果 为16   后来感觉奇怪 用了表达式1 结果为35, 更奇怪 。 表达式2 跟3是一样的。

s 先与 (n - i)相乘 再除以 (n_m - i)   与 (n - i) 跟(n_m - i)先乘 在与s相乘  有什么区别吗?

#include <stdio.h>int main(){int n, m, n_m;scanf("%d%d", &n, &m);n_m = n - m;printf("%d*", n_m);double s = 1;for (int i = 0; i < n_m; i++) {//s = s * (n - i) / (n_m - i);//1 35s = s * ((n - i) / (n_m - i));//2   其实等效为3   //s *= (n - i) / (n_m - i);//3 16printf("%lf\n", (double)(n - i) / (n_m - i));}printf("%.2lf\n", s);return 0;}

本次问题出在 类型问题  n、 i、 n_m 都是(int) 所以如果先计算 (n - i) 跟(n_m - i) 结果为int, 会被向下取整。。。大笑真是伤脑筋

原创粉丝点击