分享

小米笔试 大数阶乘算法实现及优化

 雪柳花明 2017-09-18

计算n的阶乘,阶乘的结果可能会很大。

输入n就是要求的n个阶乘

例如n=5,输出结果为120

#include <iostream>

using namespace std;

const int Max = 40000;   //int 数组范围

int res[Max];//存储中间值的数组

int main() {
	int n;

	while (cin >> n && n >= 0 && n <= 10000){
		memset(res, 0, sizeof(res));   //初始化申请空间,并每位置0
		res[0] = 1;  //0!=1

		for (int i = 1; i <= n; i++)   //1~N

			//第i次循环时,所有的数,都要乘以i
			//carry为进位,初始进位为0,个位没有进位
			for (int j = 0, carry = 0; j<Max; j++){
				res[j] = res[j] * i + carry;
				carry = res[j] / 10;
				res[j] = res[j] % 10;
			}

		int cnt;
		for (cnt = Max - 1; cnt >= 0; cnt--) //记录数的最高位在哪儿
			if (res[cnt]!=0) 
				break;

		//从后往前(高位到低位)求出不为0的一项,即结果的最高位
		for (int j = cnt; j >= 0; j--)   //高位到低位输出
			cout << res[j];

	}
	return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多