64,637
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
using namespace std;
const int N=10000; //加倆零
static int a[N];
int main()
{
int n; //键盘读数
cout<<"输入你想算的数.我告诉你它的阶乘,1到1000之间的数啊。"<<endl;
cin>>n;
if(n<0 || n>1000) // 读入数字是否有意义//加一个零
{
cout<<"输入的数不是太大就是太小。"<<endl;
cout<<"下次输入个1到1000之间的数.要不还是算不了。"<<endl;
//cin>>n;
}
else
{
int i,j,k; // i,j,k。传递 循环用,
int t=N-1; //n=10000 t=9999
a[0]=1; //第一位给 1
for(i=1;i<N;++i) //除第一位 每位赋初值 0
{
a[i]=0;
}
for(i=1;i<=n;++i) //从低往高走。1*2*3*4----*60 == 60!
{
for(j=0;j<N;++j) //从数组第一位走。。a[0]=a[0]* i ,a[1]=a[1] * i ,a[1]没有进位 所以是0.。。0*i =0.。
{
a[j]*=i;
} //对不为0的项 乘以 i。。未进位
for(k=0;k<N;++k) //从a[0]开始判断进位。 ~~~~~~~~**********这步貌似最费时间。还有上面那个循环体。
{
if(a[k]>9) //进位
{
a[k+1]=a[k+1]+a[k]/10; //十位以上的全给下一个单元
a[k]=a[k]%10; //当前单元保留个位
}
}
}
while(a[t]==0)//从最后一位开始判断。是零 就是没有意义,没有进位,没有东西。直到t出现非零项
{
--t;
}
cout<<"数据位数有:"<<(t+1)<<endl;
for(;t>=0;t--) //打印结果,从最高位开始输出。按位输出。
{
cout<<a[t];
}
cout<<endl; //清空数据缓存器
}
system("pause");
return 0;
}
const int num = 100;#include<iostream>
using namespace std;
const int N=10000;
static int a[N];
int main()
{
int n;
cout<<"Please input the data of n."<<endl;
cin>>n;
int count=0;
while(n<0 && n>1000)
{
cerr<<"The value of n is too big."<<endl;
cout<<"Please input the n again(1-1000)."<<endl;
cin>>n;
}
int i,j,k;
int t=N-1;
a[0]=1;
for(i=1;i<N;++i)
{
a[i]=0;
}
for(i=1;i<=n;++i)
{
for(j=0;j<N;++j)
{
a[j]*=i;
}
for(k=0;k<N;++k)
{
if(a[k]>9)
{
a[k+1]=a[k+1]+a[k]/10;
a[k]=a[k]%10;
}
}
}
while(a[t]==0)
{
--t;
}
cout<<"数据位数有:"<<(t+1)<<endl;
for(;t>=0;t--)
{
cout<<a[t];
if(a[i]==0)
{
++count;
}
}
cout<<endl;
return 0;
}