源小林 2022-07-13 14:12 采纳率: 100%
浏览 35
已结题

刘汝佳的紫书P20的代码运行不了?

题目描述:
输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)。
代码我使用g++编译后没有输出,是我编译有问题还是代码本身有问题,代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
   for( int a = 1;  a <= 9; a++)
    for( int b = 0; b <= 9; b++)
    {
      int n = a * 1100 + b * 11;
      int m =floor(sqrt(n) + 0.5);
      if(m*n ==n) printf("%d\n", n);
    }
  return 0;
}

gcc编译则是这样

img

  • 写回答

1条回答 默认 最新

  • a5156520 2022-07-13 14:22
    关注

    如果从你的编译提示信息来看,应该是floor()函数和sqrt()函数的头文件没有导入(我百度了一下,发现好像gcc不会自动自动链接math库,需要在gcc上加上编译参数:-lm);如果从代码的逻辑来看,可能在判断完全平方数哪里可能错了。下面是我的一个实现,不知道对不对,供参考:
    参考链接:
    undefined reference to 'floor'/undefined reference to `&_ssdsafsdsd的博客-CSDN博客

    #include<stdio.h>
    #include<math.h>
    int main()
    {
       for( int a = 1;  a <= 9; a++)
        for( int b = 0; b <= 9; b++)
        {
          int n = a * 1100 + b * 11;
    //      int m =floor(sqrt(n) + 0.5);
    //      if(m*n ==n) printf("%d\n", n);
            //判断当前aabb形式的四位数,是否是为完全平方数,简单的从31(1000的开平方约为整数)遍历到n的开平方 
            int s = (int)sqrt(n);
            if(s*s==n){
                printf("%d ",n);
            } 
        
    //        for(int c=31;c<=(int)sqrt(n);c++){
    //            if(c*c==n){
    //                printf("%d ",n);
    //                break;
    //            }
    //        }    
        }
      return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月21日
  • 已采纳回答 7月13日
  • 创建了问题 7月13日

悬赏问题

  • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
  • ¥15 unity连接Sqlserver
  • ¥15 图中这种约束条件lingo该怎么表示出来
  • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
  • ¥15 流式socket文件传输答疑
  • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
  • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
  • ¥15 win10,这种情况怎么办
  • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
  • ¥100 在连接内网VPN时,如何同时保持互联网连接