#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
int factorial(int n) //这是求阶乘的函数,利用递归实现
{
int t,i;
char a[2]; //存储int转换后的char数组
string sum,media; //定义存储阶乘输出的每一个字符的string
if(n==0) {return 1;} //必须写递归结束条件
else
{
t=n*factorial(n-1);
//cout<<n<<" X "<<(n-1)<<"!="<<t<<endl; //输出每一个阶乘的值
sum[0]='0';sum[1]='!'; //初始化阶乘左端的“0!”
for(i=1;i<=n;i++) //存储阶乘输出的每一个字符
{ //n指阶乘表达式最大的数字
itoa(i,a,10); //将每次的int数字转为char
if(n>9&&n<20) //将10和10以上数字的阶乘的输出中的“*”和数字分个位数,十位数
//存储到string数组中
{
if(i<10) //10以上的阶乘,在*0-*9的字符存储规律和10以下的阶乘一样
{ //但在*10-*n的字符规律需要重新写,所以在else重新写
sum[2*i]='*';
sum[2*i+1]=a[0];
}
else
{
sum[2*i+i%10]='*'; //注意i%10才是取余数,i/10是整除,求得商
sum[2*i+i%10+1]=a[0];
sum[2*i+i%10+2]=a[1];
}
}
else //将10以下数字的阶乘的输出中的“*”和数字存储到string数组中
{
sum[2*i]='*';
sum[2*i+1]=a[0];
}
{
for(i=0;i<=(2*n+2+n%10);i++)
{ //i<=(2*n+2+n%10),指string数组的长度
cout<<sum[i];
}
}
else //10以下数字的阶乘输出n*(n-1)*...0!
{
for(i=0;i<=(2*n+1);i++)
{
cout<<sum[i];
}
}
cout<<"="<<t<<endl;
return t;
}
{
int x; //定义阶乘N的值
char y; //定义是否重新运行main函数的逻辑值
cout<<"这是求N的阶乘,请输入N的值:(N是大于0且小于20 的整数)"<<endl;
cin>>x;
cout<<x<<"!的结果是:"<<factorial(x)<<endl; //调用阶乘函数
cout<<"是否需要再测试?(是,就按y;否,按n)"<<endl;
cin>>y;
switch(y) //重新运行main函数的分支
{
case 'y': //y为重新运行main
main();
break;
case 'n': //n为结束运行
cout<<"程序结束运行"<<endl;
break;
default: break;
}
return 0;
}
#include <string>
#include <stdlib.h>
using namespace std;
int factorial(int n) //这是求阶乘的函数,利用递归实现
{
int t,i;
char a[2]; //存储int转换后的char数组
string sum,media; //定义存储阶乘输出的每一个字符的string
if(n==0) {return 1;} //必须写递归结束条件
else
{
t=n*factorial(n-1);
//cout<<n<<" X "<<(n-1)<<"!="<<t<<endl; //输出每一个阶乘的值
sum[0]='0';sum[1]='!'; //初始化阶乘左端的“0!”
for(i=1;i<=n;i++) //存储阶乘输出的每一个字符
{ //n指阶乘表达式最大的数字
itoa(i,a,10); //将每次的int数字转为char
if(n>9&&n<20) //将10和10以上数字的阶乘的输出中的“*”和数字分个位数,十位数
//存储到string数组中
{
if(i<10) //10以上的阶乘,在*0-*9的字符存储规律和10以下的阶乘一样
{ //但在*10-*n的字符规律需要重新写,所以在else重新写
sum[2*i]='*';
sum[2*i+1]=a[0];
}
else
{
sum[2*i+i%10]='*'; //注意i%10才是取余数,i/10是整除,求得商
sum[2*i+i%10+1]=a[0];
sum[2*i+i%10+2]=a[1];
}
}
else //将10以下数字的阶乘的输出中的“*”和数字存储到string数组中
{
sum[2*i]='*';
sum[2*i+1]=a[0];
}
}
{
for(i=0;i<=(2*n+2+n%10);i++)
{ //i<=(2*n+2+n%10),指string数组的长度
cout<<sum[i];
}
}
else //10以下数字的阶乘输出n*(n-1)*...0!
{
for(i=0;i<=(2*n+1);i++)
{
cout<<sum[i];
}
}
cout<<"="<<t<<endl;
return t;
}
}
{
int x; //定义阶乘N的值
char y; //定义是否重新运行main函数的逻辑值
cout<<"这是求N的阶乘,请输入N的值:(N是大于0且小于20 的整数)"<<endl;
cin>>x;
cout<<x<<"!的结果是:"<<factorial(x)<<endl; //调用阶乘函数
cout<<"是否需要再测试?(是,就按y;否,按n)"<<endl;
cin>>y;
switch(y) //重新运行main函数的分支
{
case 'y': //y为重新运行main
main();
break;
case 'n': //n为结束运行
cout<<"程序结束运行"<<endl;
break;
default: break;
}
return 0;
}