当前位置: 代码迷 >> C语言 >> 调试2个小时 仍出现错误
  详细解决方案

调试2个小时 仍出现错误

热度:294   发布时间:2008-04-25 23:31:42.0
调试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;
}
搜索更多相关的解决方案: std  调试  using  int  

----------------解决方案--------------------------------------------------------
1。。太长
2。。看不懂
----------------解决方案--------------------------------------------------------
自27起就出问题,输出为负数。没有看你的程序,只是运行了一下。是不是有些数超出了范围?
----------------解决方案--------------------------------------------------------
手边没有C++,测试不了
初步判定
long sum_1 溢出 类型改为 long long
----------------解决方案--------------------------------------------------------
问题解决喽 感谢大家热情相助 尤其是4楼 确实是溢出问题 改long long就对了
看来我该补习一下基础了
----------------解决方案--------------------------------------------------------
  相关解决方案