要求是回文数又是素数,为什么两个代码运行出来不一样。

hyzkx. 2021-05-03 12:03:45
#include<stdio.h> #include<math.h> int sushu(int b); int huiwen(int c); int main() {int a; for(a=100;a<1000;a++) {if(sushu(a) && huiwen(a)) printf("%d\n",a); } return 0; } int sushu(int b) {int e,f; e=sqrt(b); for(f=2;f<=e;f++) if(b%f==0) return 0; } int huiwen(int c) {int g,h; g=c/100; h=c%10; if(g==h) return 1; return 0; } #include<stdio.h> #include<math.h> int sushu(int b); int huiwen(int c); int main() {int a; for(a=100;a<1000;a++) {if(sushu(a) && huiwen(a)) printf("%d\n",a); } return 0; } int sushu(int b) {int e,f; e=sqrt(b); for(f=2;f<=e;f++) if(b%f!=0) return 1; } int huiwen(int c) {int g,h; g=c/100; h=c%10; if(g==h) return 1; return 0; }
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qzjhjxj 2021-05-03
  • 打赏
  • 举报
回复
两个方法都存在漏洞和错误,第一种里,for(f=2;f<=e;f++)if(b%f==0)return 0; ,如果b素数时,if(b%f==0)return 0; 这条语句不会被执行到,也就意味着到函数运行结束,也没有一个明确的返回值,主函数里的if()判断靠什么去判断呢, 这是潜在的隐患。第二种是错上加错,不但第一种的隐患没排除,还把判断if(b%f!=0) return 1; 条件搞反了,把不是 素数的也归到素数里去了,假如b=9时,9%2!=0成立,马上return 1。
hyzkx. 2021-05-03
  • 打赏
  • 举报
回复
引用 2 楼 qzjhjxj的回复:
修改第一个,供参考:
#include<stdio.h>
#include<math.h>
int sushu(int b);
int huiwen(int c);
int main()
{
    int a;
    for(a=100;a<1000;a++)
    {
        if(sushu(a) && huiwen(a))
           printf("%d\n",a);
    }
    
    return 0;
}

int sushu(int b)
{
    int e,f;
    e=sqrt(b);
    for(f=2;f<=e;f++)
       if(b%f==0)return 0;
    return 1;
}

int huiwen(int c)
{
    int g,h;
    g=c/100;
    h=c%10;
    if(g==h)
       return 1;
    return 0;
}
第二种方法的,第二个自定义函数为啥不对。
hyzkx. 2021-05-03
  • 打赏
  • 举报
回复
引用 1 楼 forever74的回复:
两个都不对啊,验证素数的函数总得既能返回0又能返回1吧?这样才符合逻辑啊。
错在第二个自定义函数if的判断
hyzkx. 2021-05-03
  • 打赏
  • 举报
回复
引用 1 楼 forever74的回复:
两个都不对啊,验证素数的函数总得既能返回0又能返回1吧?这样才符合逻辑啊。
第一个对的,第二个不对
qzjhjxj 2021-05-03
  • 打赏
  • 举报
回复
修改第一个,供参考:
#include<stdio.h>
#include<math.h>
int sushu(int b);
int huiwen(int c);
int main()
{
    int a;
    for(a=100;a<1000;a++)
    {
        if(sushu(a) && huiwen(a))
           printf("%d\n",a);
    }
    
    return 0;
}

int sushu(int b)
{
    int e,f;
    e=sqrt(b);
    for(f=2;f<=e;f++)
       if(b%f==0)return 0;
    return 1;
}

int huiwen(int c)
{
    int g,h;
    g=c/100;
    h=c%10;
    if(g==h)
       return 1;
    return 0;
}
forever74 2021-05-03
  • 打赏
  • 举报
回复
两个都不对啊,验证素数的函数总得既能返回0又能返回1吧?这样才符合逻辑啊。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧