| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 735 人关注过本帖
标题:调试2个小时 仍出现错误
只看楼主 加入收藏
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
 问题点数:0 回复次数:4 
调试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 
2008-04-25 23:31
localc
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-4-25
收藏
得分:0 
1。。太长
2。。看不懂
2008-04-25 23:38
Sun_DN
Rank: 1
来 自:NEU
等 级:新手上路
帖 子:48
专家分:0
注 册:2006-4-5
收藏
得分:0 
自27起就出问题,输出为负数。没有看你的程序,只是运行了一下。是不是有些数超出了范围?

人不己知,而不愠,不亦君子乎?
2008-04-26 00:14
nobush
Rank: 1
等 级:新手上路
帖 子:71
专家分:0
注 册:2008-1-10
收藏
得分:0 
手边没有C++,测试不了
初步判定
long sum_1 溢出 类型改为 long long
2008-04-26 00:30
精灵传说
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-3-25
收藏
得分:0 
问题解决喽 感谢大家热情相助 尤其是4楼 确实是溢出问题 改long long就对了
看来我该补习一下基础了

there is a castle on a cloud
2008-04-26 09:19
快速回复:调试2个小时 仍出现错误
数据加载中...
 
   



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

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