C语言高精度阶乘:n!=1*2*3*4*......*(n-...22
发布网友
发布时间:2023-10-30 07:35
我来回答
共5个回答
热心网友
时间:2024-03-23 22:50
哥给你一个好的,用数组模拟乘法
俺原创的,呵呵~~~
#include <stdio.h>
void main()
{
int a[1000]={1},b[4]={0};
int k,i,j;
scanf("%d",&k);
void multi(int a[],int b[]); // 用于计算乘法的函数,计算a*b 并把结果放在a当中
void seperate(int n, int b[]); //分离一个数的没一位,并放在b中!
for (i=1;i<=k;i++)
{
seperate(i,b);
multi(a,b);
}
for (j=999;a[j]==0;j--);
//反序输出
for (i=j;i>=0;i--) //
printf("%d",a[i]); //
} //主函数结束,下面是函数部分
void seperate(int n,int b[]) //注意最后一位是放在b[0]中的!
{
int i;
for (i=0;n>0;i++)
{
b[i]=n%10;
n/=10;
}
}
void multi(int a[],int b[]) //核心程序,非常难调啊!!!!!
{
int tp[1000]={0};
int i,j,t,p,m,n;
for (m=3;b[m]==0;m--);
for (n=999;a[n]==0;n--);
for (j=0;j<=m;j++)
{
t=0;
for ( i=0;i<n+2;i++)
{
p=b[j]*a[i]+t+tp[i+j];
tp[i+j]=p%10;
t=p/10;
}
}
for (j=999;tp[j]==0;j--);
for (i=0;i<=j;i++)
a[i]=tp[i];
}
热心网友
时间:2024-03-23 22:54
哥给你一个好的,用数组模拟乘法
俺原创的,呵呵~~~
#include
<stdio.h>
void
main()
{
int
a[1000]={1},b[4]={0};
int
k,i,j;
scanf("%d",&k);
void
multi(int
a[],int
b[]);
//
用于计算乘法的函数,计算a*b
并把结果放在a当中
void
seperate(int
n,
int
b[]);
//分离一个数的没一位,并放在b中!
for
(i=1;i<=k;i++)
{
seperate(i,b);
multi(a,b);
}
for
(j=999;a[j]==0;j--);
//反序输出
for
(i=j;i>=0;i--)
//
printf("%d",a[i]);
//
}
//主函数结束,下面是函数部分
void
seperate(int
n,int
b[])
//注意最后一位是放在b[0]中的!
{
int
i;
for
(i=0;n>0;i++)
{
b[i]=n%10;
n/=10;
}
}
void
multi(int
a[],int
b[])
//核心程序,非常难调啊!!!!!
{
int
tp[1000]={0};
int
i,j,t,p,m,n;
for
(m=3;b[m]==0;m--);
for
(n=999;a[n]==0;n--);
for
(j=0;j<=m;j++)
{
t=0;
for
(
i=0;i<n+2;i++)
{
p=b[j]*a[i]+t+tp[i+j];
tp[i+j]=p%10;
t=p/10;
}
}
for
(j=999;tp[j]==0;j--);
for
(i=0;i<=j;i++)
a[i]=tp[i];
}
热心网友
时间:2024-03-23 22:48
int Foo(int n)
{
if(n==1)
return 1;
return Foo(n-1)*n
}
热心网友
时间:2024-03-23 22:49
高精度也是有程度差别的 , 就这个问题而言, 到底是要高精度×int还是高精度×高精度编程难度还是差挺多的
热心网友
时间:2024-03-23 22:49
//以计算1000!为例:
#include<stdio.h>
#define N 1000 //要计算的N
long s[N]={1,1},n=N,t=2,a=1,b=0;
int main()
{
for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)
s[a]=(b+=s[a]*t)%10000,b/=10000;
for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);
return 0;
}