高精度 阶乘和 C语言

Python015

高精度 阶乘和 C语言,第1张

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

俺原创的,呵呵~~~

#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=1i<=ki++)

{

seperate(i,b)

multi(a,b)

}

for (j=999a[j]==0j--)

//反序输出

for (i=ji>=0i--) //

printf("%d",a[i])//

} //主函数结束,下面是函数部分

void seperate(int n,int b[]) //注意最后一位是放在b[0]中的!

{

int i

for (i=0n>0i++)

{

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=3b[m]==0m--)

for (n=999a[n]==0n--)

for (j=0j<=mj++)

{

t=0

for ( i=0i<n+2i++)

{

p=b[j]*a[i]+t+tp[i+j]

tp[i+j]=p%10

t=p/10

}

}

for (j=999tp[j]==0j--)

for (i=0i<=ji++)

a[i]=tp[i]

}

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

#include<stdio.h>#include<string.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=2003i>=0i--) {

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=0i<b1i++){

b[i]=0

}

for(i=0i<a1i++){

b[i]=a[i]

}

for(i=0i<a1i++){

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=3i<=ni++){

fuzhi(c,a)

f(i,b)

fac(a,b,c)

}

k=qiu(c)

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

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

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=0j<nj++){

for(i=0i<mi++) {

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

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

俺原创的,呵呵~~~

#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=1i<=ki++)

{

seperate(i,b)

multi(a,b)

}

for (j=999a[j]==0j--)

//反序输出

for (i=ji>=0i--)//

printf("%d",a[i]) //

}//主函数结束,下面是函数部分

void seperate(int n,int b[]) //注意最后一位是放在b[0]中的!

{

int i

for (i=0n>0i++)

{

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=3b[m]==0m--)

for (n=999a[n]==0n--)

for (j=0j<=mj++)

{

t=0

for ( i=0i<n+2i++)

{

p=b[j]*a[i]+t+tp[i+j]

tp[i+j]=p%10

t=p/10

}

}

for (j=999tp[j]==0j--)

for (i=0i<=ji++)

a[i]=tp[i]

}