为什么这个代码前面总是输出几个零?怎么改?求助
查看原帖
为什么这个代码前面总是输出几个零?怎么改?求助
551088
FincheuwYggdrasil楼主2022/10/5 10:37
#include<bits/stdc++.h> 
using namespace std;
const int MAXN = 1e2+10;
const int size = 8;
const long long int MOD = 10;
int a[MAXN],b[MAXN],s[MAXN];
int n;
void write(int num[]);//输出高精度数
void clearto1(int num[]);//数组重置
void clearto0(int num[]);
void copy(int num1[],int num2[]);
void plusA(int a[],int b[]);//plus加法
void multiply(int a[],int b);
void write(int num[])
{
	printf("%d",num[num[0]]);
	for(int i = num[0];i >= 1;i--)
		printf("%d",num[i]); // ???
	puts("");
}
void clearto1(int num[])
{
	for(int i = num[0];i;i--)
		num[i] = 0;
	num[0] = num[1] = 1;
}
void clearto0(int num[])
{
	for(int i = num[0];i;i--)
		num[i] = 0;
	num[0] = 1;
}
void copy(int num1[],int num2[])
{
	for(int i = num1[0];i > num2[0];i--)
		num1[i] = 0;
	for(int i = 0;i <= num2[0];i++)
		num1[i] = num2[i];
}
void plusA(int a[],int b[])//need s->b
{
	clearto0(s);
	s[0] = max(a[0],b[0]) + 1;
	for(int i = 1;i <= s[0];i++)
	{
		s[i] += a[i] + b[i];
		s[i + 1] += s[i] / MOD;
		s[i] %= MOD;
	}
	if(!s[s[0]] && s[0] > 1)
		s[0]--;
}
void multiply(int a[],int b)
{
	clearto0(s);
	s[0] = a[0] + 2;
	for(int i = 1;i <= a[0];i++)
	{
		s[i] += a[i] * b;
		s[i + 1] += s[i] / MOD;
		s[i] %= MOD;
	}
	if(!s[s[0]] && s[0] > 1)
		s[0]--;
}
int main()
{
	scanf("%d",&n);
	if(!n)
	{
		printf("0");
	}
	clearto0(a);
	for(int i = 1;i <= n;i++)
	{
	    clearto1(b);
	    for(int j = 1;j <= i;j++)
	    {
	        multiply(b,j);
	        copy(b,s);
	    }
	    plusA(a,b);
	    copy(a,s);
	}
	write(a);
	return 0;
}
2022/10/5 10:37
加载中...