成都网站建设设计

将想法与焦点和您一起共享

c语言高精度阶乘函数 C语言高精度阶乘

C语言高精度阶乘:n!=1*2*3*4*......*(n-1)*n.

哥给你一个好的,用数组模拟乘法

图木舒克网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、自适应网站建设等网站项目制作,到程序开发,运营维护。创新互联于2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联

俺原创的,呵呵~~~

#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;n0;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;in+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];

}

高精度 阶乘和 C语言

哥给你一个好的,用数组模拟乘法

俺原创的,呵呵~~~

#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;n0;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;in+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];

}

C语言:求n阶乘(高精度) 已经用高精度乘法,如何组合程序,完成功能呢 ???

你的程序有些问题 我改了一下 你看看

#includestdio.h#includestring.h

//将数转为数组

int f(int n,int a[]){

int i=0;

while(n!=0){

a[i++]=n%10;

n=n/10;

}

return i;

}

//求数组长度

int qiu(int a[]){

int i;

for(i=2003;i=0;i--) {

if(a[i]!=0) {

return i+1;

break;

}

}

return 0;

}

//将数组a 赋值到数组b 并清零数组a

void fuzhi(int a[],int b[]){

int a1,b1,i;

a1=qiu(a);

b1=qiu(b);

for(i=0;ib1;i++){

b[i]=0;

}

for(i=0;ia1;i++){

b[i]=a[i];

}

for(i=0;ia1;i++){

a[i]=0;

}

}

//求n的阶乘

int fun(int n){

int i=0,k;

int a[2004]={0},b[2004]={0} ,c[2004]={0};

if(n==0||n==1){

printf("n=%d的阶乘为:1\n",n);

}

else

{

f(1,a);

f(2,b);

fac(a,b,c);

for(i=3;i=n;i++){

fuzhi(c,a);

f(i,b);

fac(a,b,c);

}

k=qiu(c);

printf("计算结果:\n");

for(i=k-1;i=0;i--) {

printf("%d",c[i]);

}

printf("\n");

}

return 0;

}

//本函数是求两个数之积的高精度乘法,并输出两个数之积为数组c

int fac(int a[],int b[],int c[])

{

int i,j,m=0,n=0,k=0;

m=qiu(a);

n=qiu(b);

for(j=0;jn;j++){

for(i=0;im;i++) {

c[i+j]=c[i+j]+a[i]*b[j];

while(c[i+j]=10)

{

c[i+j]=c[i+j]-10;

c[i+j+1]=c[i+j+1]+1;

}

}

}

return 0;

}

void main(){

int n;

printf("请输入N的值:\n");

scanf("%d",n);

fun(n);

return 0;

}

可以运行 结果也没有问题 如果有不懂的 可以加我QQ 354156421

C语言阶乘函数

你的函数原型是这个int jiecheng(int a);调用的却是 s=jiecheng(); 没有传参进去,所以报错,应该改为:

int s;

int result;

scanf("%d",s);

result=jiecheng(s);

另外,还要做一个特殊处理,比如:当参数为零时,输出为1;当参数为-1时,输出0;当为负数时,提示不正确


当前文章:c语言高精度阶乘函数 C语言高精度阶乘
本文地址:http://chengdu.cdxwcx.cn/article/hppdhg.html