求n的阶乘的算法框图_算法学习-大整数阶乘

a0250539627d304c29bc2ca6eeaeb62f.png

大整数阶乘

问题描述

输入正整数n,计算出n!的准确值。这里要求(0

问题分析

与通常的阶乘计算方法不一样的是这里的n比较大,使得计算出来的数超过了C语言的整数范围,因此,会使得整数溢出,从而得到错误的结果。对于大整数的阶乘,如何来解决呢?

我们考虑一下,既然这个数太大,一个变量是存储不下了,是否可以用多个变量来存储,分别存储这个数中的一个数,也就是说用数组来存储这个数。假设数组名为a,那么a[0]就是存储的这个数的个位数,a[1]就是存储的这个数的十位数,以前类推。

这样考虑完了后,问题来了,求阶乘需要进行数据的乘法运算,如何使这个数组表示的数与一个数相乘呢?举个例子如果 a[1]=2, a[0]=4, 这个数组就表示了一个为24的整数。如果让这个数组乘以5,如何来操作?

先让a[0]*5 得到 20 这是一个两位数,个位数是0,十位数是2,把个位数0放到 a[0]里面,十位数的2应该进位。接下来是求a[1]*5 得10,加上进位来的2,是12,那么,应该把12后面的2放到a[1],然后1进位。也就是说应该放到a[2]里面。以此类推。

参考程序

#include int main(void){ int a[10000],i,j,l=0,s,n; scanf("%d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值