俺原创的,呵呵~~~
#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]
}