小数阶乘
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
unsigned long long n;
cin >> n;
unsigned long long i, sum = 1;
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
{
for (i = 2; i <= n; i++)
sum *= i;
}
cout << sum << endl;//输出结果
return 0;
}
//大数阶乘,将数输入到文本文件
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
int n;
ofstream outfile;
outfile.open("a.txt");
int i, j, k = 0;
vector<int> vec;
vec.push_back(1);//在容器的尾端插入1
cin >> n;
if (n == 0)
cout << 0 << endl;
else if (n == 1)
cout << 1 << endl;
else //n大于1的情况
{
for (i = 1; i <= n; i++)
{
for (j = vec.size() - 1; j >= 0; j--)//每个单元的元素都乘上
{
vec[j] *= i;//从个位开始乘
}
k = 0;//是否有进位,初始为0
for (j = vec.size() - 1; j >= 0; j--)
{
vec[j] += k;//加上进位的数,个位加零
k = vec[j] / 10;
vec[j] = vec[j] % 10;
}
while (k)//不能将k直接插入到前面,因为k有可能大于10
{
vec.insert(vec.begin(), k % 10);//直接放余数到前面即可,vec.begin():当前vector容器中起始元素
k = k / 10;
}
}
}
for (i = 0; i<vec.size(); i++)
{
outfile << vec[i]; //输出每位数到文本文件,倒数第二位为十位
// 最后一位为个位
}
outfile << endl;
outfile.close();
return 0;
}