#include<stdio.h>
#include<math.h>
#include<string.h>
#define N 10
int a[N], b[N], c[N];
void cpy(int* a, int* b) {
for(int i=N-1;i>=0;i--)
*(a+i) = *(b+i);
}
void sudoplus(int*p,int*q)//Add array from pointer q to array from pointer p.
{
int i;
for (i = 0; i < N; i++)
{
if (*(p+i)+*(q+i) < 100000000)
{
*(p + i) = *(p + i) + *(q + i);
}
else
{
(*(p+i+1))++;
*(p + i) = *(p + i) + *(q + i) - 100000000;
}
}
}
void sudomultiply(int n)//Multiply array b n times.
{
int i;
void sudoplus(int*, int*);
cpy(c, b);
for (i = 0; i < n-1; i++)
{
sudoplus(b, c);
}
}
void sudoprint(void)//Print array a in order.
{
int i, flag;
for (i = N - 1, flag = 0; i >= 0; i--)
{
if ((a[i] != 0) && (flag == 0))
{
printf("%d",a[i]);
flag = 1;
continue;
}
if (flag==1)
{
printf("%08d", a[i]);
}
}
}
int main(void)
{
int n, i;
void sudoplus(int*, int*);
void sudomultiply(int);
void sudoprint(void);
b[0] = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sudomultiply(i);
sudoplus(a,b);
}
sudoprint();
return(0);
}
洛谷P1009 [NOIP1998 普及组] 阶乘之和经典解法
最新推荐文章于 2024-02-25 12:13:08 发布