c++ 整型转化成字符型
发布网友
发布时间:2022-04-22 07:20
我来回答
共3个回答
热心网友
时间:2023-07-14 23:55
楼上根本没有看到这道题出题者要考你的那一点,在题设给出的n值下,n!早就远远超出整形数范围了,根本不可能把n!的值计算出来。
我这里有一个方法,就是利用log(n!)=log(n)+log(n-1)+log(n-2)+.....+log(2)+log(1),而这里log底数是10的话log(n!)的值取整就是n!的位数了,这样只需要一个简单的循环就可以了,但是需要用到cmath库函数log()
C++代码如下:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double N,logV;
int i;
while(cout<<"输入N的值:" && cin>>i)
{
N=i;
for(i=1,logV=0;i<=N;i++)
{
logV+=log(1.0*i);
}
logV/=log(10.0);
cout<<N<<"!的位数:"<<(int)(logV+1)<<endl;
}
return 0;
}
我知道你这个是一个onlinejudge系统的题目,我这个程序是给你看编译运行来的,输出了一些提示性文字,没有按照输出要求。你知道这个算法稍微改一下程序就好了。
如果不符合要求可以HI我,我再改。
热心网友
时间:2023-07-14 23:56
Real_Adam 的解法很妙,支持一下!
BTW: math.h 中 的log()函数好像是自然对数。有没有以10为底的对数函数?还是要自己在代码里转一下?lg(n) = log(n) / log(10)?
热心网友
时间:2023-07-14 23:56
把每一位数字分离出来输出即可。如m=123,k=m%10,输出k,m=m%10,循环直到m=0为止