编写一个C++程序,可以求一个大数n的阶乘(n!),n的值范围从1~100之间变化。

题目要求:(1) 输出的结果从右往左每四个数字之间用一个“,”隔开。
相关知识:(1) 函数 (2) 位运算

#include <iostream>
#include <vector>

using namespace std;

#define MAX_DIGITAL 10000

void PrintFactorial(unsigned int n)
{
vector<unsigned int> r(1, 1);
size_t j = 0;

for (unsigned int i = 1; i <= n; i++)
{
for (j = 0; j < r.size(); j++)
{
r[j] *= i;
}

int carry = 0;
j = 0;

do
{
r[j] += carry;
carry = r[j] / MAX_DIGITAL;
r[j] %= MAX_DIGITAL;
} while (++j < r.size());
if (carry > 0)
{
r.push_back(carry);
}
}

cout << *r.rbegin();
for_each(++r.rbegin(), r.rend(), [](const long val){
printf_s(",%04d", val);
});
}

int main(int argc, _TCHAR* argv[])
{
PrintFactorial(100);
cout << endl;
system("pause");
return 0;
}追问

感谢您,可这个有那么一点复杂,可以简单一点吗,或者用c语言编一个

追答

这已经是非常简单的算法了。可以支持非常大的数,只要int能够表示的下。

温馨提示:答案为网友推荐,仅供参考
相似回答