65,206
社区成员
发帖
与我相关
我的任务
分享
#include<iostream>
#include<string>
#include<vector>
#include<iomanip>
using namespace std;
int main()
{
vector<int> ival;
int num,n,addnum;
while(cin>>n)
{
num=1;
ival.clear();
ival.push_back(num);
for(int i=1;i<=n;i++)
{
addnum=0;
for(int cnt=ival.size()-1;cnt>=0;cnt--)
{
num=ival[cnt]*i;
if(cnt!=ival.size()-1)
{
num+=addnum;
addnum=0;
}
if(num>9999)
{
addnum=num/10000;
num=num% 10000;
ival[cnt]=num;
if(!cnt)
ival.insert(ival.begin(),addnum);
}
else
ival[cnt]=num;
}
}
for(int i=0;i!=ival.size();i++)
if(!i)
cout<<ival[i];
else
cout<<setfill('0')<<setw(4)<<ival[i];
cout<<endl;
}
return 0;
}
#include <stdio.h>
#define max 32767
int main()//把这个算法增加处理后面0的情况就是二楼链接的算法了
{
int i,j,k,x,n=0,sum=0,a[max+1];
printf("输入要求阶乘的数:");
while(scanf("%d", &n))
{
k=max;
a[k]=1;//先乘以1
for(i=2;i<=n;i++)//从2乘到n
{
x=0;
for(j=max;j>=k;j--)//max-k+1标记当前的位数
{//将n与现存的各位相乘,更新结果
x=a[j]*i+x;
a[j]=x%10;
x=x/10;
}
while(x>0)//有进位的情况下,k减
{
k--;
a[k]=x%10;
x=x/10;
}
}//结束计算阶乘
for(i=k;i<=max;i++)
printf("%d", a[i]);
printf("\n输入要求阶乘的数:");
}
return 0;
}
不对,我刚才说错了,上面的编译错误是1楼的
可能我太菜了,15楼的代码我看的不是很懂,编译后运行时没有运行结果(我等很就都没出来)。