鱼C论坛

 找回密码
 立即注册
查看: 1716|回复: 9

[已解决]执行程序时sqrt报错

[复制链接]
发表于 2020-2-4 20:44:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         unsigned long long num = 600851475143;

  6.         for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--) // sqre执行时报错,在头文件加了math.h
  7.         {
  8.                 if (!(num % i))
  9.                 {
  10.                         printf("%llu", i);
  11.                         break;
  12.                 }
  13.         }
  14.         return 0;
  15. }
复制代码



unbunto告警信息如下:
/tmp/ccRMBou7.o:在函数‘main’中:
test3.c:(.text+0x3c):对‘sqrt’未定义的引用
collect2: error: ld returned 1 exit status

最佳答案
2020-2-5 00:23:39
何摆鱼呀 发表于 2020-2-4 23:47
还是不可以

编译的时候在指令后面加 -lm试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-4 21:35:47 | 显示全部楼层
把for里面第一项定义和赋值语句提出来:
        unsigned long long i = (unsigned long long)sqrt((double)num);
        for(i; i > 0; i--)
可能是因为括号的原因导致无法编译
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-4 23:47:32 | 显示全部楼层
EthanHsiung 发表于 2020-2-4 21:35
把for里面第一项定义和赋值语句提出来:
        unsigned long long i = (unsigned long long)sqrt((doub ...

还是不可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 00:23:39 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
何摆鱼呀 发表于 2020-2-4 23:47
还是不可以

编译的时候在指令后面加 -lm试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 10:06:01 | 显示全部楼层
先声明一下 i 试试:

  1. #include <stdio.h>
  2. #include <math.h>

  3. int main()
  4. {
  5.         unsigned long long num = 600851475143, i;      // 修改

  6.         for(i = (unsigned long long)sqrt((double)num); i > 0; i--) // 修改
  7.         {
  8.                 if (!(num % i))
  9.                 {
  10.                         printf("%llu", i);
  11.                         break;
  12.                 }
  13.         }
  14.         return 0;
  15. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 19:05:33 | 显示全部楼层
一个账号 发表于 2020-2-5 10:06
先声明一下 i 试试:

还是不能编译过, 加上-lm就可以编译过
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 19:07:03 | 显示全部楼层
EthanHsiung 发表于 2020-2-5 00:23
编译的时候在指令后面加 -lm试试

加了-lm可以编译通过, 是不是只要Linux系统使用了math库就需要在编译时加上-lm
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 19:09:39 | 显示全部楼层
何摆鱼呀 发表于 2020-2-5 19:07
加了-lm可以编译通过, 是不是只要Linux系统使用了math库就需要在编译时加上-lm

是的,之前没注意是在Linux上,加-lm是为了链接上这个库
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-5 19:12:41 | 显示全部楼层
EthanHsiung 发表于 2020-2-5 00:23
编译的时候在指令后面加 -lm试试

for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--)    为什么num的平方根可以保证i是素数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-5 19:19:21 | 显示全部楼层
何摆鱼呀 发表于 2020-2-5 19:12
for(unsigned long long i = (unsigned long long)sqrt((double)num); i > 0; i--)    为什么num的平方根 ...

i是num的平方根强制转换成整型的结果,不能保证i是素数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-27 06:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表