n阶高精度乘法,(求高阶阶乘)
Posted cndccm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了n阶高精度乘法,(求高阶阶乘)相关的知识,希望对你有一定的参考价值。
先来复习一下小学数学
:
大家还记不记得小学算多位数的乘法是怎么算的?
卖个关子,大家一定要好好想想!
好了,别管到底还能不能想起来我们都要一块复习一下:
我们借助一下源自百度的图片 来复习下
相信大家都不陌生吧
好了,现在我们就开始办正事了
话不多说,我们直接看代码。具体解释会在注释中,如果有什么要补充的记得评论区留言
#include "stdio.h"
#include "string.h"
#define MAX 10000//结果最大位数,可以自行扩大·以扩大范围
int f[MAX];//定义存储各位的数组
void Arr_reset(int a[], int m, int n)//数组初始化函数
{
int i;
for (i = m; i <= m; i++)
{
a[i] = 0;
}
}
int main(void)
{
int i, j, n;
printf("Enter n:");
scanf("%d", &n);
Arr_reset(f, 0, (sizeof(f) / sizeof(int))); //对数组进行初始化
f[0] = 1;//初始化数组。可以理解为更改数组为1的阶乘
for (i = 2; i <= n; i++)
{
//乘以 i
int c = 0;
for (j = 0; j < MAX; j++) //最不易理解的
{
int s = f[j] * i + c;//可以理解为分离每一位,并继续往下计算下一位
f[j] = s % 10;//可以参考上面的图片,数的顺序是反过来的
c = s / 10;//方便 下面输出数 ,因为最右边的 一位 肯定是 大于 0的,而且 后面全为0
//算出的 s 是单位数时,会连续覆盖 f[0]
//否则一个多位数会倒过来存储,如 123,f[0]存 3,f[1]存 2,f[3]存 1
}
}
for (j = MAX - 1; j >= 0; j--)//查找 结果的开头 ,
if (f[j])
break;
for (i = j; i >= 0; i--)//直接输出即可
printf("%d", f[i]);
printf("
");
return 0;
}
下面我们来看试运行结果
OK,今天就到这里
后期会持续更新,敬请期待
以上是关于n阶高精度乘法,(求高阶阶乘)的主要内容,如果未能解决你的问题,请参考以下文章