csdnbeng 2021-03-18 22:53 采纳率: 0%
浏览 30

代码在cb上运行不对,但在vc上却对了(结果不对)但是如果把while移到下面就对了,为什么?

题目:计算2个整数之间的素数。
给定2个整数A≤B <10 5,从A到B(含B)的素数是多少。

输入:多达1000行,每行包含2个由空格分隔的整数A和B。当A = B = -1时,输入终止(不处理此行)。

输出:对于输入中的每一行–除了最后一行(其中A = B = -1)-打印A和B之间(包括首尾在内)的质数数。

样本输入

0 9999
1 5
-1 -1
1 5
-1 -1

样本输出

1229
3
3
代码
#include<stdio.h>
#include<string.h>
int main()
{

    int a,b,i,j,x,count;
    int m[100002]= {0};
    while(scanf("%d %d",&a,&b)&&a!=-1&&b!=-1)
    {
            
            memset(m, 0, sizeof m);
        for(i=2; i<=100002; i++)
        {
            if(m[i]==0)
                for(j=i*2; j<=100002; j+=i)
                    m[j]=1;
        }count=0;
        for(i=2; i<=100002; i++)
        {
            if(m[i]==0)
                count++;
            m[i]=count;

        }
        if(a>0)
        x=m[b]-m[a-1];
        else
    x=m[b]-m[a];
        printf("%d\n",x);
    }
    return 0;
}
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 00:47
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这段代码在C语言环境下可以正常工作,但是如果你尝试在Visual C++中运行它,你会发现问题。这是因为scanf()函数在Windows平台下默认是无符号字符流读取模式,这意味着它会忽略任何负号。

    要解决这个问题,你可以使用fgets()getchar()函数来获取用户输入,并将其转换为字符串,然后进行相应的操作。以下是一个示例:

    #include <stdio.h>
    
    int main() {
        char input[100];
        fgets(input, 100, stdin);
    
        // 将输入字符串转换为整数数组
        int a, b, x;
        sscanf(input, "%d %d", &a, &b);
    
        // 计算并打印素数数量
        x = b - a + 1;
        printf("%d\n", x);
    
        return 0;
    }
    

    请注意,这个示例使用的是sscanf()函数,这是一个C标准库函数,用于将字符串解析成整型数据。你需要确保你的编译器支持这个函数。

    评论

报告相同问题?