调试2个小时 仍出现错误
救命啊 我在电脑前一个一个数试和并验算 2个小时了 是从M中取N个数的问题 m!/n!/(m-n)! 算不了 30 15 不知道问题在哪 请各位大侠指教 谢谢先
#include <iostream>
using namespace std;
static int a[50]={ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127,131, 137, 139, 149, 151, 157, 163, 167, 173,
179,181, 191, 193, 197, 199, 211, 233, 227, 229,
};
int main(void)//大家好 第一次写注释 好紧张
{
int x=0;
int y=0;
void Test(int m,int n);
cin>>x>>y;
if (x<y || x<=0 || y<=0)
{
return(0);
}
if (x==y)
{
cout<<"1"<<endl;
cin.get();
return(0);
}
if (y==1)
{
cout<<x<<endl;
cin.get();
cin.get();
return(0);
}
Test(x,y);
cin.get();
cin.get();
return(0);
}
void Test(int m,int n)
{
long i = 0;
long j = 0;
long b[50]={0};
long sum_1=1;
long sum_2=1;
long k;
if (n<=m/2)
{
n=m-n;//
}
for(i=1 ; i<=m-n ; i++)// (m-n)阶乘
{
j=i;
for(k=0 ; k<50&&a[k]<j ; k++) //以下是约分
{
while(j%a[k]==0)
{
b[k] += 1;
j=j/a[k];
}
}
sum_2 = sum_2*j;
}
for(i=m ; i>n ;i--) //约掉n!的m!
{
j=i;
for(k=0 ; k<50&&a[k]<j ; k++)
{
while(j%a[k]==0)
{
if(b[k]==0)
{
break;
}
b[k] -= 1;
j=j/a[k];
}
}
sum_1 = sum_1*j;
}
for(k=0 ; k<50 ; k++) //验算
{
while(b[k]!=0)
{
sum_1=sum_1*a[k];
b[k]=b[k]-1;
}
}
cout<<sum_1/sum_2<<endl;
}
----------------解决方案--------------------------------------------------------
1。。太长
2。。看不懂
----------------解决方案--------------------------------------------------------
自27起就出问题,输出为负数。没有看你的程序,只是运行了一下。是不是有些数超出了范围?
----------------解决方案--------------------------------------------------------
手边没有C++,测试不了
初步判定
long sum_1 溢出 类型改为 long long
----------------解决方案--------------------------------------------------------
问题解决喽 感谢大家热情相助 尤其是4楼 确实是溢出问题 改long long就对了
看来我该补习一下基础了
----------------解决方案--------------------------------------------------------