求N!的值 【问题描述】     用高精度方法,求N!的精确值(N以一般整数输入)。

【输入样例】ni.in    10

【输出样例】ni.out    3628800

本题解题障碍在于,受数据类型取值范围的限制,当N值很大时,阶层的结果放到变量中会造成数据溢出。

解题思路:

        将相乘的结果,以单个的数字逆序存在int[ ] f数组里,f[0]存放当前数组的有效长度。求阶层的每一步中,都是用当前数字乘以数组中的每位数字,因为是逆序存放,所以从f[1]开始乘,每一位乘完的数字处理好进位。

        单步过程以5040*8举例如下(省略了存放有效位数的f[0]):

        step1:

------------------------------------------------------------------

        step2:

-----------------------------------------------------------------------

        积=4*8,需要进位,f[2]=2,把3进位到f[3],f[3]=3+0×8=3

        step3:

-------------------------------------------------------------------------------

        积=5*8,需要进位,f[4]=0,把4进位到f[5]

        step4:

规律:当前j位的结果=f[ ]数组中的j位与当前数i的乘积+上轮进位,s=f[j]*i+c,然后取模留下个位,整除10将其他位存在进位c里,f[j]=s%10;c=s/10;

#include <iostream>
#include <cstring>
using namespace std;
const int maxn=3000;
int f[maxn];
int main()
{int i,j,n;cin>>n;memset(f,0,sizeof(f));f[0]=1;f[1]=1;/*把每次相乘的结果拆成单个数字放在数组f[]里,每个数字乘当前数,再把结果拆成单个数字放在数组里,如此循环*/for (i=2;i<=n;i++){//c存放进位int c=0;for (j=1;j<=f[0];j++){int s=f[j]*i+c;f[j]=s%10;c=s/10;/*wanziwu改进,之前是for (j=0;j<maxn;j++) ,改成f[0]里放数组长度,只计算有效数字,不需要遍历maxn次,乘到最后一位如果有进位,长度增加 */if(j==f[0]&&c>0){f[0]++;}}}for (i=f[0];i>0;i--)cout<<f[i];return 0;}

高精度算法求阶层详解相关推荐

  1. 试设计递归算法dfs traverse_BFS 算法框架套路详解

    作者:labuladong 公众号:labuladong 后台有很多人问起 BFS 和 DFS 的框架,今天就来说说吧. 首先,你要说 labuladong 没写过 BFS 框架,这话没错,今天写个框 ...

  2. c语言实现sha1算法注解,【密码学】SHA1算法实现及详解

    1 SHA1算法简介 安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digit ...

  3. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  4. DL之AlexNet:AlexNet算法的架构详解、损失函数、网络训练和学习之详细攻略

    DL之AlexNet:AlexNet算法的架构详解.损失函数.网络训练和学习之详细攻略 相关文章 Dataset:数据集集合(CV方向数据集)--常见的计算机视觉图像数据集大集合(建议收藏,持续更新) ...

  5. DL之ShuffleNet:ShuffleNet算法的架构详解

    DL之ShuffleNet:ShuffleNet算法的架构详解 相关文章 DL之ShuffleNet:ShuffleNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL之Shuf ...

  6. DL之MobileNetV2:MobileNetV2算法的架构详解(包括ReLu的意义)

    DL之MobileNet V2:MobileNetV2算法的架构详解 相关文章 DL之MobileNetV2:MobileNetV2算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL ...

  7. DL之SqueezeNet:SqueezeNet算法的架构详解

    DL之SqueezeNet:SqueezeNet算法的架构详解 相关文章 DL之SqueezeNet:SqueezeNet算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL之Sque ...

  8. ​​​​​​​DL之ResNeXt:ResNeXt算法的架构详解

    DL之ResNeXt:ResNeXt算法的架构详解 相关文章 DL之ResNeXt:ResNeXt算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 DL之ResNeXt:ResNeXt算 ...

  9. 【算法知识】详解堆排序算法

    点击蓝色字关注我们! 什么是堆 「堆」首先是一个完全二叉树,「堆」分为「大顶堆」和「小顶堆」: 「大顶堆」 : 每个节点的值大于或等于其左右孩子节点的值,称为大顶堆. 「小顶堆」同理就是每个节点的值小 ...

最新文章

  1. 7分钟分析人类全基因组,他们刷新全球纪录,此前最快也要24小时
  2. 一根数据线玩转树莓派Zero
  3. CentOS中怎样解压rar文件
  4. js面向对象和继承的碎碎念
  5. python连接sql数据库_python连接SQL数据库
  6. python 图片转字符画
  7. 95-30-018-Channel-AbstractNioByteChannel
  8. 【linux系统编程】理解冯•诺依曼体系结构
  9. PHP ceil()函数
  10. 最小路径问题_Floyd
  11. 四边形不等式优化-石子合并
  12. 自定义事件(如未作说明,本博客文档都是用C#代码)
  13. Unity3D游戏开发入门引导:Unity3D收费方案和版本、下载地址、安装教程
  14. 如何整合JIRA、FishEye、Crucible进行CodeReview
  15. css炫酷标题,炫酷 CSS 背景效果的 10 个代码片段
  16. SAP mbew 标准价和移动平均价
  17. 项目中pom.xml文件变灰且中间有横杠改怎么解决?
  18. (一)随处可见的LED广告屏是怎么工作的呢?
  19. HTTP、FTP状态码 (share)
  20. 局域网联机_文明6/单机.局域网联机/5/4/3【单机游戏】

热门文章

  1. 【西瓜创客】2022学年5月21日NOC大赛-初赛线上试题
  2. kettle效率提升
  3. 企查查爬取返回405错误的一种处理方法
  4. 【像素与浏览器视口的细节】及移动web设置“width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no“原因
  5. Winform打开和关闭控制台
  6. 电脑开机黑屏,只有鼠标箭头(windows无法加载桌面)?
  7. 解决小程序插槽slot内容显示不对,无论是原生小程序还是uniapp开发的,解决办法如下
  8. outlook自定义快捷键_如何自定义主题和Outlook邮件的格式
  9. [DP] UOJ #311. 【UNR #2】积劳成疾
  10. 京东区块链之科普篇:京东在区块链技术领域的应用与布局