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为止

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com