posts - 17,  comments - 0,  trackbacks - 0
因为要反复求解某数的阶乘,所以求解之前要记得使用memset将数组清零
#include <cstdlib>
#include 
<iostream>

using namespace std;

int main()
{
    
long long a[30000],b[30000];
    
void jiecheng(int n, long long *a);
    
int n,i,j,carry; 
    cin
>>n;
    memset(a,
0,sizeof(a));
    jiecheng(n,a);
    
for(i=n-1;i>0;i--)
    {
        carry
=0;memset(b,0,sizeof(b));
        jiecheng(i,b);
        
for(j=1;j<=a[0];j++)
        {
            a[j]
+=b[j]+carry;
            carry 
=a[j]/10;
            a[j]
=a[j]%10;
        }
        
while(carry)
        {
            a[
0]++;
            a[j]
=carry%10;
            carry
/=10;
            j
++;
        }
    }
    
for(i=a[0];i>0;i--)
        cout
<<a[i];
    cout
<<endl; 
    
    system(
"PAUSE");
    
return 0;
}

void jiecheng(int n, long long *a)
{
    
long long carry,i;
    
int j;    
   
    
for(i=1;i<=n;i++)
    {
        carry
=0;
        
if(i==1)
        {    
            a[
0]=1;a[1]=1;
        }
        
else
        {
           
for(j=1;j<=a[0];j++
           {
                a[j]
=i*a[j]+carry;
                carry 
= a[j]/10;
                a[j]
=a[j]%10;                
           }
           
while(carry)
            {
                a[
0]++;
                a[j]
=carry%10;
                carry
/=10;
                j
++;
            }
        }
    }
    
/*for(i=a[0];i>0;i--)
        cout<<a[i];
    cout<<endl;
*/
}
posted on 2011-10-31 20:14 刘聪 阅读(554) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理