| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 421 人关注过本帖
标题:[求助]这个程序怎么运行不出正确结果?
只看楼主 加入收藏
nova2201
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-7-14
收藏
 问题点数:0 回复次数:4 
[求助]这个程序怎么运行不出正确结果?

要求是求出 m!
P=_________ 的值,m,n为正整数且 m要大于n

n!(m-n)!
下面是我的程序

#include <conio.h>
#include <stdio.h>

float fun(int m, int n)
{ float p=1;

while (m>1&&n>0)

{p*=(float)m/(n*(m-n)) ;
m--;
n--;
}

return p ;
}

main() /* 主函数 */
{ clrscr();
printf("P=%f\n", fun (12,8));

搜索更多相关主题的帖子: 结果 运行 
2007-09-15 11:57
hhts1987
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-9-5
收藏
得分:0 
很显然,那个(m-n)--是必要的,不减的话 那个m-n永远都是一个相同的值,这是常识啊
2007-09-15 12:19
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

首先,你的while (m>1&&n>0)中m--; n--;同时减小,当n=0时,而m并不等于0,
这是依据你的循环结束条件,当n=0时,循环结束.而m!并没有计算完就结束,这显然不合符题要求.
建议楼主对上述等式作一定的处理:
m!/(n!*(m-n)!)===>1*2*3*...*n*(n+1)*...*(m-1)*m/(1*2*3*4*...*(n-1)*n * 1*2*3*4*...*(m-n-1)*(m-n)
m! n! (m-n)!
====>(n+1)*...*(m-1)*m/1*2*3*4*...*(m-n-1)*(m-n)
而后再用一个函数long fun(int m,int start);来求start*(start+1)*(start+2)*...*(m-1)*m
long fun(int m,int start)
{
long sum=0;
while(m>=start){ sum*=m;m--;}
return sum;
}

所以上述表达式可以表示为:
(1.0*fun(m,n+1))/fun(m-n,1) ;


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-09-15 12:28
hhts1987
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-9-5
收藏
得分:0 
三楼的好想法啊,顶了

[此贴子已经被作者于2007-9-15 12:41:11编辑过]


2007-09-15 12:39
nova2201
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2007-7-14
收藏
得分:0 
谢谢3楼的指教
不过你说的long sum=0;
应该是 sum=1才对吧?
或者我可以先累乘求出m!赋给p,在累乘求出n!用p去除再赋给p,再累乘求(m-n)!用p去除再赋给p
最后返回
是不是可以呢
2007-09-15 12:53
快速回复:[求助]这个程序怎么运行不出正确结果?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017431 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved