题目:http://acmore.cc/problem.php?id=1584
代码:
#include <stdio.h>
int calc(char* p, int len, int n, char* q)
{
int i, j = 0, m = 0;
for (i = 0; i < len; i++)
{
m += p[i] * n;
q[j++] = m % 10;
m /= 10;
}
while (m > 0)
{
q[j++] = m % 10;
m /= 10;
}
return j;
}
void print(char* p, int len)
{
int i = len - 1;
while (i >= 0) printf("%d", p[i--]);
}
int main()
{
int i, j = 0, k = 1, n;
char s1[3000], s2[3000] = {1};
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
if (j > 0)
{
k = calc(s1, j, i, s2);
j = 0;
}
else
{
j = calc(s2, k, i, s1);
k = 0;
}
}
if (j > 0)
print(s1, j);
else
print(s2, k);
return 0;
}
代码:
#include<stdio.h>
#include<string.h>
#define MAX 3000
int main()
{
int a[MAX],i,j,n;
int c=0; //进位
int s;
memset(a,0,sizeof(a));
scanf("%d",&n);
a[0]=1;
for(i=2;i<=n;i++) //乘数
{
for(j=0;j<MAX;j++)
{
s=a[j]*i+c;
a[j]=s%10;
c=s/10;
}
}
for(i=MAX-1;i>=0;i--) //从第一个不为零的开始
if(a[i])
break;
for(j=i;j>=0;j--)
{
printf("%d",a[j]);
}
return 0;
}
代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX 4000
- int main() {
- int n,a[MAX],i,j,s,r=0;
- scanf("%d",&n);
- memset(a,0,sizeof(a));
- a[0]=1;
- for(i=2;i<=n;i++){
- for(j=0;j<MAX;j++){
- s=a[j]*i+r;
- r=s/10;//进位
- a[j]=s%10;
- }
- }
- for(i=MAX-1;i>=0;i--){
- if(a[i])
- break;
- }
- for(j=i;j>=0;j--)//倒序输出
- printf("%d",a[j]);
- return 0;
- }
电脑要没电了,先复制下来,研究研究。