一个计算排列组合的程序,算出来结果是负数,咋回事?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个计算排列组合的程序,算出来结果是负数,咋回事?相关的知识,希望对你有一定的参考价值。

#include "stdio.h"
#include "stdlib.h"
int calPossibilities(int,int);
int main()

int m,n,cal;
printf("请输入总人数:\n");
scanf("%d",&m);
printf("请输入选择的人数:\n");
scanf("%d",&n);
cal=calPossibilities(m,n);
printf("共有%d种选择方式",cal);
system("pause");
return 0;

int calPossibilities(int m,int n)

int a,b,c,i,x;
for (a=1,i=1;i<=m;i++)
a*=i;
for (b=1,i=1;i<=n;i++)
b*=i;
for (c=1,i=1;i<=(m-n);i++)
c*=i;
x=a/(b*c);
return x;


求大神告知,这是神马情况,

15!=1307674368000
已经超出了int的表示范围。发生了数据溢出,才变成了负数。
你可以试一下:
long calPossibilities(long m,long n)

long i,x,t;
if(n>m-n)n=m-n;
for(x=1,i=1;i<=n;)
x=x*m--/i++;
return x;

参考技术A for (a=1,i=1;i<=m;i++)
a*=i
你的这个循环是在求15的阶乘 得到的值太大 导致溢出

用plt画图咋y轴不按大小排列

跑完实验想把保存的loss通过plt画出来,结果画出来这么一玩意儿,吓我一跳,合着我的模型是在增加噪声。

仔细一看才发现,因为保存下来的loss是文本,所以得转为float类型或者int类型才能正常显示,加个强制转换就好啦。

以上是关于一个计算排列组合的程序,算出来结果是负数,咋回事?的主要内容,如果未能解决你的问题,请参考以下文章

急~~~~~~为啥我用C语言和蔡勒公式写的算某一天是星期几的程序总是不对?

排列组合中的大括号怎么算

matlab怎么计算出来的数很多都是NaN的值呢?怎么回事啊

GRID的团队排列和 团队里的排列不一样是咋回事 比如看一个FS在GRID里是2队 实际上他在3队 咋调?

20! 用%d算出来是怎样都是负数 用f就是整数 为啥?

python画图窗口显示在运行窗口下面咋回事