编写一个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能够表示的下。

温馨提示:内容为网友见解,仅供参考
无其他回答

编写一个程序,可以求一个大数n的阶乘(n!),n的值范围从1~100之间变化...
char str2[9000],str3[9000];\/\/两个字符数组,用来存储 整形数据 转化而成的 字符数据 int digit = 1; \/\/位数,初始化为1 int temp; \/\/阶乘的任一元素与临时结果的某位的乘积结果 printf("please in put n:\\n");scanf("%d",&n);str[0] = 1; \/\/将结果先初始化为1 ...

用c++编程——求大整数的阶乘(n>100)
long s[N]={1,1},n=N,t=2,a=1,b=0;int main{ for(;a<=*s||(++t<=n?(b=0,a=1):0);(*s==a++&&b)?(*s)++:0)s[a]=(b+=s[a]*t)%10000,b\/=10000;for(printf("%d",s[*s]);--*s>0;)printf("%04d",s[*s]);return 0;} ...

如何用c++编写一程序计算100的阶乘
int m; \/\/存放节数 int n; \/\/求n的阶乘 cout<<"请输入一个正整数<0---10000>:";cin>>n;if(n<0){ cout<<"输入数据错误!"<<endl;return;} else if(n==0){ cout<<"0!==1"<<endl;return;} \/\/初始化s s=(unsigned int *)malloc(n*sizeof(s)*10);for(i=1;i<n...

c++一个小程序编写
}计算n阶乘:include<cstdlib>#include<iostream>using namespace std;int main(){int n,s=1;cin>>n;for(int i=1;i<=n;i++){s*=i;}cout<

c++用面向过程的方法编写程序输入一个整数N求N的阶乘
下面是用C++面向过程的方法编写程序输入一个整数N求N的阶乘的示例代码:```c++ include <iostream> using namespace std;int main() { int num, factorial=1;cout << "请输入一个整数N:";cin >> num;\/\/ 阶乘计算过程(循环实现)for (int i = 1; i <= num; i++) { factorial *=...

C++求n的阶乘!
C++求n的阶乘代码如下:include<iostream> using namespace std;int fac(int);int main(){ int n;while(cin>>n){ cout<<n<<"!= "<<fac(n)<<endl;} return 0;} int fac(int x){ register int i,f=1; \/\/定义寄存器变量 for(i=1;i<=x;i++)f*=i;return f;} ...

如何用Visual C++编写N的阶乘程序呢?
f=f*n; printf("n!=%d\\n",f); }。4、点击如图的两个按钮,左边是complie是编译的意思 ,右边build 是连接的意思。5、检查完,没有显示error的情况下,最后点击BuildExecute 运行软件。6、最后一步运行软件后,Debug里面有个exe的可运行程序,就是N的阶乘程序了。

c语言中n的阶乘怎么写C语言中如何编写N的阶乘
1、打开visual C++软件,新建任务,鼠标左键点击文件。2、选择C++ source file:2、输入代码,首先引入c语言标准库“# include ”,之后在主函数里编写程序。3、其实n的阶乘就是从1到n的累积,只要编写一个for循环从1一直到n不停的求积就可以了:3、编写完成后,点击左边的编译按钮 。4、编译完成后...

求n的阶乘(100<n<1000)的C语言程序
pc = 0; flag = N-1;while (n <= Num){ m = n;k = 4;while(m > 0){ str_n[k] = m%10; m \/= 10; k--;} if (pc%2 == 0){ if(fun_mul (str_n,result_1,result_0,flag) != 1){ printf("\\n\\n结果溢出!当前所设置的最大结果为 %d 位 已完成 %d 的阶乘",...

C++编写程序求n的阶乘
int jiesheng(int n){ if(n==1)return 1;else return (n*(jiesheng(n-1)));}

相似回答