求助,40以下阶乘和对,以上就错了,不知道错在哪
查看原帖
求助,40以下阶乘和对,以上就错了,不知道错在哪
311830
Lhz1313楼主2020/7/30 15:32
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
int tmp[70],a[70]={1},ans1[70],ans[70]={0};	
int main()
{
    int N,i,j,i1,j1,lena;
    scanf("%d",&N);
	for(i=1;i<=N;i++)
	{
		a[1]=1;
		lena=1;
	   	for(j=i;j>=2;j--)
	    {
		   	int k=j,lens=1;
		   	while(k)
		   	{
		   		tmp[lens++]=k%10;
		   		k=k/10;
			}
			lens-=1;
			memset(ans1,0,200);
		 for(i1=1;i1<=lena;i1++)
	     {
	 	for(j1=1;j1<=lens;j1++)
	 	{
	 		ans1[i1+j1-1]+=a[i1]*tmp[j1];
	 		ans1[i1+j1]+=(ans1[i1+j1-1]/10);
	 		ans1[j1+i1-1]%=10;
		}
	     } 
		if(ans1[lena+lens]!=0)
		{
			for(i1=1;i1<=lena+lens;i1++)
			a[i1]=ans1[i1];
			lena=lena+lens;
		}
		else
		{
			for(i1=1;i1<=lena+lens-1;i1++)
			a[i1]=ans1[i1];
			lena=lena+lens-1;
		}	
		}
		int i2=1;
		while(i2<=lena)
	    {
		ans[i2]=ans[i2]+a[i2];
		ans[i2+1]+=ans[i2]/10;
		ans[i2]%=10;
		i2++;
	    }	 
	} 	
	if(ans[lena+1]!=0)
	{
		for(i=lena+1;i>=1;i--)
	printf("%d",ans[i]);
	}
	else
	{
		for(i=lena;i>=1;i--)
	printf("%d",ans[i]);
	}
}

2020/7/30 15:32
加载中...