P1009 [NOIP1998 普及组] 阶乘之和

P1009 [NOIP1998 普及组] 阶乘之和_第1张图片

P1009 [NOIP1998 普及组] 阶乘之和_第2张图片 参考代码&&代码解读

#include 
using namespace std;
int a[1000];//存储阶乘得到的每一位数 
int b[1000];//存储当前相加和得到的每一位数                  
int main()
{
 	int n;
 	cin>>n;
 	for(int i=0;i<1000;i++)
 	{
 		a[i]=b[i]=0;
	 }
 	a[1]=1;
 	for(int i=1;i<=n;i++)
	{
		int temp=0;
		for(int j=1;j<=1000;j++)//模拟手写乘法,注意进位
		{
			a[j]=a[j]*i+temp;
			temp=a[j]/10;
			a[j]=a[j]%10;
		}
		temp=0;
		for(int j=1;j<=1000;j++)//模拟手写加法,注意进位
		{
			b[j]=b[j]+a[j]+temp;
			temp=b[j]/10;
			b[j]=b[j]%10;
		}
 	}
	 int k;
	 for(int i=999;i>=0;i--)//因为最高位不可能为0,所以从后往前找到第一个不为0的数
	 {
	 	if(b[i]!=0)
	 	{
	 		k=i;break;
 		}
	 }
	 
	 for(int i=k;i>=1;i--)//从后往前输出,直到i为1
	 {
	 	cout<

你可能感兴趣的:(算法,c++,数据结构)