65,210
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
#include<iomanip>
#define Max 10000
int deep = 0;//进位深度
void Funciton(int n, int array[], int i, int j);
void Carrybit(int n, int array[], int i, int j)
{
if (j + 1 == Max)
{
std::cout << "Error" << std::endl;
return;
}
if (array[j + 1] != -1)
{
Funciton(n, array, i, j + 1);
array[j + 1] += array[j] / 10;
if (array[j + 1] >= 10)
{
Carrybit(n, array, i, j + 1);
}
}
else
{
array[j + 1] = array[j] / 10;
}
array[j] %= 10;
deep++;
}
void Funciton(int n, int array[], int i, int j)
{
if (deep>0)
{
deep--;
return;
}
else if (array[j] == -1)
{
return;
}
array[j] *= i;
if (array[j] >= 10)
{
Carrybit(n, array, i, j);
}
}
int main()
{
int n;
std::cout << "Enter the number n:";
std::cin >> n;
if (n <= 0)
{
std::cout << "n must > 0" << std::endl;
}
for (int num = 1; num <= n; ++num)
{
int i, j;
int array[Max] = { 1 };//保存每一位的数字,最多Max位
for (j = 1; j<Max; j++)
{
array[j] = -1;
}
for (i = 1; i <= num; i++)
{
for (j = 0; j<Max; j++)
{
Funciton(num, array, i, j);
}
}
std::cout << std::right << std::setw(4) << num << "! = ";
for (j = Max - 1; j >= 0; j--)
{
if (array[j] != -1)
std::cout << array[j];
}
std::cout << std::endl;
}
return 0;
}