- 计算大数的阶乘:
#include<stdio.h>
#include<string.h>
#define MAX 3000
int a[MAX];//用来存储阶乘后的数
void Big_factorial(int n)
{
memset(a,0,sizeof(a));//先将数组a所有的空间都初始化为0
a[0]=1; //1的阶乘
int b=0,s,k;//b是进位,初始化为0
//计算大数阶乘核心代码
for(int i=2; i<=n; i++)
{
for(int j=0; j<MAX; j++)
{
s=a[j]*i+b;
a[j]=s%10;
b=s/10;
}
}
//去掉数组中后面为0的
for(k=MAX-1; k>=0; k--)
{
if(a[k])
break;
}
for(int m=k; m>=0; m--)//a[0]表示个位数,a[1]表示十位数,.....所以要逆序输出数组
{
printf("%d",a[m]);
}
puts("");
return;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int sum=0,y;
scanf("%d",&y);
Big_factorial(y);
}
return 0;
}
大数斐波那契数列:
#include<stdio.h>
int main()
{
int a[1005][255]={},m,b=0;
a[1][250]=1,a[2][250]=1;
for(int i=3;i<=1001;i++){
for(int j=250;j>=1;j--){
m=a[i-1][j]+a[i-2][j]+b;
if(m<10){
a[i][j]=m;
b=0;
}
else{
a[i][j]=m%10;
b=1;
}
}
}
int n;
while(~scanf("%d",&n)){
int y=0;
for(int k=1;k<=250;k++){
if(a[n][k]!=0)//去除前导0
y=1;
if(y==1)
printf("%d",a[n][k]);
}
puts("");
}
return 0;
}