题目要求:(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;
}追问
#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能够表示的下。
温馨提示:答案为网友推荐,仅供参考