关于c语言组合数精确度问题
来源:互联网 发布:整理通讯录的软件 编辑:程序博客网 时间:2024/04/30 20:49
本文属原创 , 转载请注明出处
最近遇到几个组合数的问题,无论怎么写答案都有错,不知道错在哪,,不过今天写了一个程序测试,测试的问题是 int long long int double 三个类型的C(m,n)的范围,
组合数 即 C(m,n) 即 m*(m-1)*(m-2)……(m-n+1)/ (n!); 可以理解为 ((m!) / (m-n)! ) /n!;
当然,用int的话 只能运算 16的阶乘 所以就需要像个办法简化这个过程,让int可以存下结果值,,
上述公式可以简化为
(m-i+1)/ i ;i 从1 到n
所以下面贴上代码
<span style="font-size:14px;">#include<stdio.h>int C_int(int m, int n){int sum=1,i;for(i=1;i<=n;i++)sum=sum*(m-i+1)/i;return sum;}long long int C_llong(int m, int n){long long int sum=1,i;for(i=1;i<=n;i++)sum=sum*(m-i+1)/i;return sum;}double C_double(int m, int n){double sum=1,i;for(i=1;i<=n;i++)sum=sum*(m-i+1)/i;return sum;}int main(){int m,n;while(~scanf("%d%d",&m,&n)){printf("%12d ",C_int(m,n));printf("%22lld ",C_llong(m,n));printf("%22.0lf\n",C_double(m,n));}return 0;}</span>
上述程序写了三个返回值不同的函数,因为m,n 肯定在int范围内,就不用更改了 而且 因为 当m= 2n时 是C(m)从0到m的最大值,就拿m = 2n的情况做研究,
下面贴结果图
从图中很容易看出,,即使优化了过程,, int 也只能存下 30以内的组合数,, longlongint 可以存下70以内的,,double就不测试了,这个数据够用到100就行了,,所以组合数题目的范围如果大于上述几个值,,那么最后的就是用double
0 0
- 关于c语言组合数精确度问题
- 关于C#timer 时间精确度的问题
- 组合数 C语言练习
- c语言实现组合数
- 关于C语言中*与++的组合问题解析
- 加和,浮点数精确度问题
- Java浮点数计算精确度问题
- C语言:关于实型精确度和取值范围的计算方法
- C语言 - 三位数组合问题
- 关于WdatePicker.js插件日期精确度问题
- 关于PHP运算精确度的问题
- 纯C语言:递归组合数源码
- 用C语言求组合数
- 用C语言求组合数
- 精确度问题
- C语言:关于计算字符串中空格数的问题
- 关于求所有五阶幻方组合数问题
- 关于用C语言简单实现组合
- 游起来吧!超妹!
- 数据结构-----栈数组实现
- wordpress构建电子商务系统之WooCommerce 中文链接优化
- 从QuickTime到Beats:回顾苹果历史上的音乐传奇
- (20)JS实现简单的图片向左无缝滚动
- 关于c语言组合数精确度问题
- MP4解析,包含moof
- 总结:数字封装与数组,字典的写法和语法糖
- HDU2578_Dating with girls(1)(二分)
- 实现删除之前弹出确认对话框
- 护肤洁肤五大误区!
- (十)加工并存储数据的数据结构
- SpringMVC核心类与接口
- maven build web project