左嘉


私信TA

用户名:zuojia

访问量:88570

签 名:

Jz

等  级
排  名 5
经  验 34531
参赛次数 226
文章发表 72
年  龄 40
在职情况 在职
学  校 北京理工大学
专  业

  自我简介:

同往常一样,打开电脑进入深度系统准备做题,题目要求N!的位数,需要调用数学函数log10,如下所示:

#include<stdio.h>
#include<math.h>
int main(){
	int t,n,i;
	double s;
	scanf("%d",&t);
	while(t--) {
		scanf("%d", &n);
		s = 1;
		if (n == 1) printf("1\n");
		else {
			for (i = 2; i <= n; i++)
				s += log10(i);
			printf("%d\n", (int)s);
		}
	}
	return 0;
}

1、用gcc编译,包含了math.h,却不能引用数学函数log10。不要紧,换个编译器试试看Tiny C Compiler,可惜不能下载。

2、还是用gcc,先尝试自动更新,使用在线安装命令:

sudo apt-get install gcc

直接安装,得知:gcc 已经是最新版 (4:7.2.0-1d1)。gcc 已设置为手动安装。再次编译,仍然产生“对'log10'未定义的引用”。

3、继续尝试在线安装命令:

sudo apt-get install build-essential

继续执行之后,可以用g++了!编译求N!位数的程序,用g++编译成功,但是用gcc还是出错。

4、要不,访问gcc官网,找到日本镜像站点,找到对应的版本:7.2.0,下载不了;再找其他镜像:俄罗斯镜像站点,版本7.2.0,这里选择下载:gcc-7.2.0.tar.gz,有107M,可以下载;或者到清华大学开源软件镜像站,也能下载。

5、本来计划按步骤进行安装:为你详解Linux安装GCC方法,能configure,但是生成不了Makefile。

6、看来,在configure阶段就有问题没解决:参考centos7自定义安装gcc7.2.0,无法定位软件包,只有继续找到所需的软件包。

7、借鉴Linux下编译安装GCC-7.2.0,在configure阶段又出现问题,提示需要先安装一款m4的软件。

8、手动安装m4, autoconf, automake, libtool,同时更新环境变量:

export PATH=/home/administrator/m4-1.4.13/bin:$PATH

再次配置gmp-6.1.2成功!接下来安装gmp-6.1.2、mpfr-3.1.6、mpc-1.0.3成功!

9、配置gcc-7.2.0如下:

./configure --prefix=/home/administrator/gcc-7.2.0 --enable-threads=posix --disable-checking --enable-languages=c,c++ --disable-multilib --with-gmp=/home/administrator/gmp-6.1.2 --with-mpfr=/home/administrator/mpfr-3.1.6 --with-mpc=/home/administrator/mpc-1.0.3

终于生成了Makefile,可以运行make了,等了三个多小时,仍在编...

10、编完后不要忘记:把gcc-7.2.0中的gcc、g++等命令在/usr/bin目录下分别做一个符号连接。以及后续步骤:Linux下编译安装GCC-7.2.0

 

0.0分

0 人评分

  评论区

求阶乘数位长度 
方法一:
可设想n!的结果是不大于10的M次幂的数,
即n!<=10^M(10的M次方),
则不小于M的最小整数就是 n!的位数,
对该式两边取对数,有 M =log10^n! 
即:M = log10^1+log10^2...+log10^n 循环求和,就能算得M值,
该M是n!的精确位数。
当n比较大的时候,这种方法方法需要花费很多的时间。
方法二:
利用斯特林(Stirling)公式的进行求解。下面是推导得到的公式:
res=(long)((log10(sqrt(4.0*acos(0.0)*n))+n*(log10(n)-log10(exp(1.0))))+1);
当n=1的时候,上面的公式不适用,
所以要单独处理n=1的情况!
有关斯特林(Stirling)公式及其相关推导,这里就不进行详细描述,有兴趣的话可看这里。
这种方法速度很快就可以得到结果。详细证明如下:
http://episte.math.ntu.edu.tw/articles/mm/mm_17_2_05/index.html
以上内容摘自http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=69优秀代码
2018-07-18 08:18:56
解决方法只有一句:gcc -o a.out test.c -lm,其中a.out是编译将生成的可执行文件名,test.c是源码文件,-lm添加名为m的库,m是math的缩写?表示数学函数库?
2018-07-12 22:10:49
  • «
  • 1
  • »