C语言:求n阶乘(高精度) 已经用高精度乘法,如何组合程序,完成功能呢 ???
答案:4 悬赏:80 手机版
解决时间 2021-01-30 23:37
- 提问者网友:绫月
- 2021-01-30 02:09
C语言:求n阶乘(高精度) 已经用高精度乘法,如何组合程序,完成功能呢 ???
最佳答案
- 五星知识达人网友:逐風
- 2021-01-30 03:08
//你自己研究研究有的注释没写
//你原来的错的
#include
#include
#include
#include
#define MAX 10001
//高精度乘法
//返回值乘法结果的位数
//a存放乘数的数组、b存放乘数的数组、lsum表示结果的位数、la表示乘数a的位数、lb表示乘数b的位数
//注意:sum, a, b数字的低位在前,标号从0开始且每个数字的0位没有意义,sum[0]=0
int bigchenfa(int *sum,int *a,int *b,int lsum,int la,int lb)
{
int i,j ;
memset(sum,0,sizeof(int) * MAX);
lsum = 0 ;
for(i=1 ; i<= la ; i++)
for(j=1,lsum=i-1; j<= lb ; j++)
sum[++lsum] += b[j] * a[i] ;
for(i=1 ; i<= lsum ; i++)
if (sum[i] >= 10)
{
if( sum[lsum] >= 10)
lsum ++ ;
sum[i+1] += sum[i] / 10 ;
sum[i] %= 10 ;
}
return lsum ;
}
int Inc(int *n, int l)
{
int i = 1;
while (n[i] == 9)
{
n[i]=0;
i++;
}
if (i > l)
l++;
n[i]++;
return l;
}
int Factorial(int *result, int n)
{
memset(result,0,MAX * sizeof(int));
result[1]=1;//初值为1
int temp[MAX]={0};
temp[1]=1;
int mult[MAX]={0};
mult[1]=1;//第二个乘数初始化为1
int lr=1;//结果的位数
int lmult=1;//第二个乘数的位数
for(int i=1; i <= n; i++)
{
//temp=result * mult
lr = bigchenfa(temp, result, mult ,lr, lr, lmult);
//temp->result
memcpy(result, temp, sizeof(temp));
//mult增加1
lmult = Inc(mult, lmult);
}
return lr;
}
int main(void)
{
int result[MAX];//用于存放结果的
int lresult;//结果的位数
int n;//
scanf("%d", &n);
lresult = Factorial(result, n);
int i;
for(i = lresult; i >= 1; i--)
printf("%d", result[i]);
return 0;
}
//你原来的错的
#include
#include
#include
#include
#define MAX 10001
//高精度乘法
//返回值乘法结果的位数
//a存放乘数的数组、b存放乘数的数组、lsum表示结果的位数、la表示乘数a的位数、lb表示乘数b的位数
//注意:sum, a, b数字的低位在前,标号从0开始且每个数字的0位没有意义,sum[0]=0
int bigchenfa(int *sum,int *a,int *b,int lsum,int la,int lb)
{
int i,j ;
memset(sum,0,sizeof(int) * MAX);
lsum = 0 ;
for(i=1 ; i<= la ; i++)
for(j=1,lsum=i-1; j<= lb ; j++)
sum[++lsum] += b[j] * a[i] ;
for(i=1 ; i<= lsum ; i++)
if (sum[i] >= 10)
{
if( sum[lsum] >= 10)
lsum ++ ;
sum[i+1] += sum[i] / 10 ;
sum[i] %= 10 ;
}
return lsum ;
}
int Inc(int *n, int l)
{
int i = 1;
while (n[i] == 9)
{
n[i]=0;
i++;
}
if (i > l)
l++;
n[i]++;
return l;
}
int Factorial(int *result, int n)
{
memset(result,0,MAX * sizeof(int));
result[1]=1;//初值为1
int temp[MAX]={0};
temp[1]=1;
int mult[MAX]={0};
mult[1]=1;//第二个乘数初始化为1
int lr=1;//结果的位数
int lmult=1;//第二个乘数的位数
for(int i=1; i <= n; i++)
{
//temp=result * mult
lr = bigchenfa(temp, result, mult ,lr, lr, lmult);
//temp->result
memcpy(result, temp, sizeof(temp));
//mult增加1
lmult = Inc(mult, lmult);
}
return lr;
}
int main(void)
{
int result[MAX];//用于存放结果的
int lresult;//结果的位数
int n;//
scanf("%d", &n);
lresult = Factorial(result, n);
int i;
for(i = lresult; i >= 1; i--)
printf("%d", result[i]);
return 0;
}
全部回答
- 1楼网友:等灯
- 2021-01-30 04:26
这是什么程序?我怎么看不懂?
- 2楼网友:三千妖杀
- 2021-01-30 03:39
求n阶乘如下
这多简单
#include
void main()
{double a=1,s=1,n;
scanf("%d\n",&n);
for(;a<=n;a++)
{ s*=a;}
printf("%d\n",s);
}
这多简单
#include
void main()
{double a=1,s=1,n;
scanf("%d\n",&n);
for(;a<=n;a++)
{ s*=a;}
printf("%d\n",s);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯