#include <iostream>
#include <vector>
const int MAX_NUM = 1000000;
using namespace std;
//自写大数阶乘
void testBig(int n,vector<int> &v) {
//计算阶乘1~n
for (int i = 2; i <= n; i++) {
int flag = 0;//表示进位
for (vector<int>::iterator it = v.begin(); it != v.end();it++) {
int isMax = *it * i + flag;//将数组vector定为10w进制
*it = isMax % MAX_NUM;
flag = isMax / MAX_NUM;
}
if (flag != 0) {
v.push_back(flag);//若进位标志不为0,则加入数组尾部
}
}
}
//输出
void testPrintBig(vector<int>& v) {
int flag = 0;//标志位,最高位不能为0
for (vector<int>::reverse_iterator it = v.rbegin(); it != v.rend();it++) {
vector<int> v1(6);
int num = 1;//除位标志,每次乘10
for (vector<int>::iterator itJ = v1.begin(); itJ !=v1.end(); itJ++) {
*itJ = *it / num % 10;
num *= 10;
}
for (vector<int>::reverse_iterator itJ = v1.rbegin(); itJ != v1.rend();itJ++) {
if (!flag) {
if (*itJ == 0) {
continue;
}
else {
flag = 1;
}
}
if (flag) {
cout << *itJ;
}
}
}
}
//主函数
int main()
{
int n = 0;
vector<int> v;
v.push_back(1);
cout << "请输入您希望计算的阶乘: ";
cin >> n;
testBig(n, v);
testPrintBig(v);
system("pause");
return 0;
}
c++实现1000以内的阶乘
于 2021-12-22 00:54:34 首次发布