为什么第四个点错了两位数字
查看原帖
为什么第四个点错了两位数字
704713
AnthonyZHOU楼主2022/10/31 16:02
#include <iostream>
#define SIZE 64
using namespace std;
struct EntierLong
{
	int chiffres[SIZE];
};
EntierLong addition(EntierLong n1,EntierLong n2)
{
	EntierLong n;
	for(int i=0;i<SIZE;i++)
	{
		n.chiffres[i]=0;
	}
	for(int i=0;i<SIZE;i++)
	{
		n.chiffres[i]+=(n1.chiffres[i]+n2.chiffres[i])%10;
		n.chiffres[i+1]+=(n1.chiffres[i]+n2.chiffres[i])/10;
	}
	return n;
}
EntierLong multiplication(EntierLong n1,EntierLong n2)
{
	EntierLong n;
	for(int i=0;i<SIZE;i++)
	{
		n.chiffres[i]=0;
	}
	for(int i=0;i<SIZE;i++)
	{
		for(int j=0;j<SIZE;j++)
		{
			n.chiffres[i+j]+=(n1.chiffres[j]*n2.chiffres[i]);
		}
	}
	for(int i=0;i<SIZE;i++)
	{
		n.chiffres[i+1]+=n.chiffres[i]/10;
		n.chiffres[i]%=10;
	}
	return n;
}
EntierLong rEntierLong(long long int num)
{
	EntierLong n;
	for(int i=0;i<SIZE;i++)
	{
		n.chiffres[i]=0;
	}
	long long int k=num;
	int i=0;
	while(k!=0)
	{
		n.chiffres[i]=k%10;
		k/=10;
		i++;
	}
	return n;
}
EntierLong factoriel(int times)
{
	EntierLong n;
	for(int i=0;i<SIZE;i++)
	{
		n.chiffres[i]=0;
	}
	n.chiffres[0]=1;
	for(int i=1;i<=times;i++)
	{
		EntierLong temps=rEntierLong(i);
		n=multiplication(n,temps);
	}
	return n;
}
void presentation(EntierLong n)
{
	int i=SIZE-1;
	while((n.chiffres[i]==0)&&(i>0))
	{
		i-=1;
	}
	for(int j=i;j>=0;j--)
	{
		cout<<n.chiffres[j];
	}
	cout<<endl;
}
int main()
{
	int times;
	cin>>times;
	EntierLong n;
	for(int i=0;i<SIZE;i++)
	{
		n.chiffres[i]=0;
	}
	for(int i=1;i<=times;i++)
	{
		n=addition(n,factoriel(i));
	}
	presentation(n);
	return 0;
}
2022/10/31 16:02
加载中...