问题描述:
题目描述
输入一个正整数n。输出n!的最高位上的数字。
输入
输入一个正整数n(n不超过1000)。
输出
输出n!的最高位上的数字。
代码实现:
#include <iostream>
using namespace std;
#include<vector>
double jiecheng(int n)
{
double result=1;
for(int i=1;i<=n;i++)
{
while(result>100)
{
result=result/10;
}
result=result*i;
}
return result;
}
int main() {
int n;
cin>>n;
double result = jiecheng(n);
//cout<<"result="<<result<<endl;
bool flag=true;
while(flag)
{
if(result<10)
{
flag=false;
}
else
{
result=result/10;
}
}
cout<<(int)result<<endl; // 输出第一个数字
}
效果展现:
代码分析:
(1)计算阶乘
double jiecheng(int n)
{
double result=1;
for(int i=1;i<=n;i++)
{
while(result>100)
{
result=result/10;
}
result=result*i;
}
return result;
}
这个地方的处理才是最重要的,如果没有这个限定,那么当n=1000时,已经超出了int,double,long long等数据类型的最大表示范围,我们这样是借助浮点数,让他能够稳定控制在两位数,当然你把这个改成1000也没问题,因为我们是以小数形式,例如123,转化成了1.23,也不影响输出的第一个数是1.
(2)输出第一个数字
while(flag)
{
if(result<10)
{
flag=false;
}
else
{
result=result/10;
}
}
cout<<(int)result<<endl; // 输出第一个数字
好啦,希望能够帮助到大家!