当前位置: 代码迷 >> C语言 >> 谁能编程做这个题,拜他为师!
  详细解决方案

谁能编程做这个题,拜他为师!

热度:161   发布时间:2006-03-04 22:22:00.0
谁能编程做这个题,拜他为师!
编程: 求N!
条件: N很大!
要求: 输入N值 输出它的值!
例如输入N=1000 结果输出值
搜索更多相关的解决方案: 编程  1000  

----------------解决方案--------------------------------------------------------

太简单了.....


----------------解决方案--------------------------------------------------------

#include <iostream.h>
#include <iomanip.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int getN();
int getBitNum(int n);
char *init(int size);
void calc(char *a,int n);
void display(char *a,int size);
/*-------------------------------*/
void main(void)
{
int n=getN();
int size=getBitNum(n);
char *pa=init(size);
calc(pa,n);
display(pa,size);
delete []pa;
}
/*-------------------------------*/
int getN()
{
int n;
printf("请输入n!中的n:");
cin>>n;
while(n<0)
{
printf("输入有错误,请重新输入:");
cin>>n;
}
if(n==0)
exit(1);
return n;
}
/*-------------------------------*/
int getBitNum(int n)
{
double sum=1.0;
int i=1;
for(;i<=n;i++)
sum+=log10(i);
return (int)sum;
}
/*-------------------------------*/
char *init(int size)
{
char *pa=new char[size];
if(!pa)
{
printf("too large factor of %d\n",size);
exit(1);
}
pa[0]=1;
int i=1;
for(;i<size;i++)
pa[i]=0;
return pa;
}
/*-------------------------------*/
void calc(char*a,int n)
{
double bitcount=1;
int begin=0;
int i=2;
for(;i<=n;i++)
{
long and=0;
bitcount+=log10(i);
if(a[begin]==0)
begin++;
int j=begin;
for(;j<(int)bitcount;j++)
{
and+=i*a[j];
a[j]=char(and%10);
and/=10;
}
}
}
/*-------------------------------*/
void display(char*a,int size)
{
int bit=0;
int i=size-1;
for(;i>=0;i--)
{
if(bit%68==0)
cout<<"第"<<setw(3)<<(bit/50+1)<<"个68位:";
cout<<(int)a[i];
bit++;
}
cout<<endl;
}

/*-------------------------------*/


----------------解决方案--------------------------------------------------------
上面的程序在vc编辑器下,要不然会出错的。
----------------解决方案--------------------------------------------------------
int getBitNum(int n)
这个函数的作用是?
----------------解决方案--------------------------------------------------------
呵呵!2楼编的是抄袭哦!
和我看的答题一模一样!
不过这个编的时候好多人都考虑的太简单,
数字太大时会溢出!


----------------解决方案--------------------------------------------------------

这个论坛上就有答案~如果你肯找的话


----------------解决方案--------------------------------------------------------
数据结构...
一维数组扩充空间...
----------------解决方案--------------------------------------------------------
论坛的以前的帖子有,程序挺短的
----------------解决方案--------------------------------------------------------
哪有这么麻烦啊
----------------解决方案--------------------------------------------------------