n阶高精度乘法,(求高阶阶乘)
2024-08-28 10:54:48
先来复习一下小学数学
:
大家还记不记得小学算多位数的乘法是怎么算的?
卖个关子,大家一定要好好想想!
好了,别管到底还能不能想起来我们都要一块复习一下:
我们借助一下源自百度的图片 来复习下
相信大家都不陌生吧
好了,现在我们就开始办正事了
话不多说,我们直接看代码。具体解释会在注释中,如果有什么要补充的记得评论区留言
#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("\n");
return 0;
}
下面我们来看试运行结果
OK,今天就到这里
后期会持续更新,敬请期待
最新文章
- Qt - 读取GPS数据
- 软件工程--界面UI 的原型设计
- WebView 的使用----android 网络连接处理分析
- 12、c#中事务及回滚
- 斯坦福第四课:多变量线性回归(Linear Regression with Multiple Variables)
- lucene索引
- 更改EBS APPS 密码流程
- 适配iOS9遇到的一些问题_Scheme白名单_ Bitcode及解决办法
- Java笔记1 : 在生产者消费者模式中,线程通信与共享数据,死锁问题与解决办法
- css的存在形式以及优先级
- Ext JS学习第十天 Ext基础之动态加载JS文件(补充)
- Redmine管理项目2-邮件通知
- HTTP Request header
- HTML DOM innerHTML 属性及实现图片连续播放
- HTML DOM 属性
- 潭州课堂25班:Ph201805201 并发(进程,线程) 第十一课 (课堂笔记)
- xampp配置多个监听端口和不同的网站目录
- 模仿WIN32程序处理消息
- 201621123008 《Java程序设计》第四周学习总结
- ListView的另一种可读性更强的ViewHolder模式写法
热门文章
- IDEA常用的几个插件
- 【转】IEnumerable接口的一个简单示例
- 使用vim打开文件的16进制形式,编辑和全文替换
- Eclipse 连接 SQL Server 2012数据库 教程
- 爬虫学习笔记2requests库和beautifulsoup4库学习笔记
- smarty文章字符截取
- 缓存 - 数据缓存 - IndexedDB - Dexie.js
- The Softmax function and its derivative
- 【你不知道的javaScript 上卷 笔记4】javaScript 中闭包的一些运用
- linux - mysql 异常:ERROR 1820 (HY000): You must SET PASSWORD before executing this statement