做题时遇到一道题,计算150的阶乘并打印,没有任何思路T_T,百度了一下看到了很多巨巨写的代码,看了好久才明白。
要向巨巨们学习,好东西要分享出来,才不像某人一样藏在自己的草稿箱里(此处做一个鄙视的表情),弱以后解决了一些较难的问题,也会在这里分享~
废话不多,开始正题。
目标:利用数组模拟数字,实现计算大数字阶乘
编程语言:C/C++
编译环境 code::blocks 13.12
解析:
1.读题
所给的数据为大数字,long long int也不过64位,没有足够的空间来储存阶乘,所以想到了数组模拟数字的思想。
2.解题思路
用一道小学竖式运算来做引例
1 2 3 4
* 5
———
6170
如上图,不难想到,利用数组来模拟这一过程,用若干个<10的正整数组成数组来模拟数字,然而上图乘法运算用低位开始逐个乘以乘数, 于是在数组中逆置模拟数字,下图给出1-7的模拟阶乘运算思路
0--1
1--1
2--2
3--6
4--4 2
5--0 2 1
6--0 2 7
7--0 4 0 5
3.具体操作
声明一个整形数组nun[200]用于模拟数字,数组大小大于结果数字位数,声明变量temp、digit、next分别用于临时储存每一位的阶乘结果,数字位数、以及进