13test02:阶乘
//假设32位int型变量y是表示最大人数的x的阶乘,即y=x!,当x最大值取什么时,y取最大值
//,且乘法不溢出。
#include<iostream>
using namespace std;
unsigned int Fun(unsigned int);
int main()
{
unsigned int max_person_num=0;
max_person_num=~max_person_num;
cout<<max_person_num<<endl;
for(unsigned int i=2;Fun(i)<=max_person_num&&Fun(i)>Fun(i-1);i++)
//C++中数据溢出时类似汽车里程表,达到最大值是立即归零.
//即如果int型最大值为10,int i=10;则i+=1之后,i=0而非11.所以在for循环的测试条件中
//加入了Fun(i)>Fun(i-1)用来测试返回值是否有溢出。因为整数的阶乘是不断增大的,所以
//一旦溢出则其阶乘比小于前一个数的阶乘.
cout<<"i="<<i<<" y="<<Fun(i)<<endl;
cout<<"x最大为:"<<i-1<<" y最大为:"<<Fun(i-1)<<endl;
return 1;
}
unsigned int Fun(unsigned int x)//x阶乘函数.
{
if(1==x) return 1;
else return x*Fun(x-1);
}
//,且乘法不溢出。
#include<iostream>
using namespace std;
unsigned int Fun(unsigned int);
int main()
{
unsigned int max_person_num=0;
max_person_num=~max_person_num;
cout<<max_person_num<<endl;
for(unsigned int i=2;Fun(i)<=max_person_num&&Fun(i)>Fun(i-1);i++)
//C++中数据溢出时类似汽车里程表,达到最大值是立即归零.
//即如果int型最大值为10,int i=10;则i+=1之后,i=0而非11.所以在for循环的测试条件中
//加入了Fun(i)>Fun(i-1)用来测试返回值是否有溢出。因为整数的阶乘是不断增大的,所以
//一旦溢出则其阶乘比小于前一个数的阶乘.
cout<<"i="<<i<<" y="<<Fun(i)<<endl;
cout<<"x最大为:"<<i-1<<" y最大为:"<<Fun(i-1)<<endl;
return 1;
}
unsigned int Fun(unsigned int x)//x阶乘函数.
{
if(1==x) return 1;
else return x*Fun(x-1);
}