如何打印第n个系列?

时间:2014-01-20 15:05:56

标签: c++ c

我正在尝试打印系列的第n个数字

... 2,23,235,2357,235711,23571113

但是在n = 3之后我没有得到正确的输出。

在n = 3时,它给出234这是错误的

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

main()
{
    unsigned int t, n, p, i, j, d;
    int s;

    scanf("%d", &t);
    if (t <= 10)
    {
        while (t != 0)
        {
            scanf("%d", &n);
            p = n;
            j = 2;
            s = 0;
            while (p > 0)
            {
                d = prime(j);
                // printf("%d",d);
                if (d == 1)
                {
                    s = s + j * pow(10, p - 1);
                    p--;
                    j++;
                }
                else
                    j++;
            }
            printf("%d", s);
            t--;
        }

    }

}

int prime(int num)
{
    int i, flag = 1, n;

    // n=sqrt(num);
    for (i = 2; (i <= num / 2) && (flag == 1); i++)
    {
        if (num % i == 0)
            flag = 0;
    }
    if (flag == 0)
        return 0;
    else
        return 1;
}

我试图在每次迭代后生成一个素数。

3 个答案:

答案 0 :(得分:1)

在某些低质量的C实现中,即使数学结果在浮点格式中完全可表示,pow函数也不会返回正确的结果。例如,pow(10, 2)可能会返回99.9999999999999857891452847979962825775146484375而不是100。

如果将非整数的浮点值分配给整数对象,则通过截断将该值转换为整数。因此,例如,234.9999847412109375将变为234。

通常,应避免使用pow等浮点函数进行整数运算。但是,对于您知道pow的结果应该恰好是整数的合理小值,您可以使用roundround(pow(10, p - 1))更正结果。

答案 1 :(得分:1)

因此,您正在生成素数,并希望输出连接素数的字符串。

编写一个函数,用前n个素数填充数组。这很简单。 然后你写一个输出函数,如:

for (i = 0; i < n; ++i) {
    for (j = 0; j <= i; ++j) {
        printf("%d", arr[j]);
    }
    printf("\n"); /* or any other separator */
}

大量数字不再有问题,直到达到数十亿的质数。

答案 2 :(得分:0)

不使用任何额外空间和内置功能!

#include<stdio.h>
int isPrime(int p)
{
    int i;
    for(i=2;i*i<=p;i++)
    if(p%i==0)
    return 0;
    return 1;
}
int main()
{
    int n=10,count=0,p=2;
    while(count<n)
    {
        if(isPrime(p))
        {
            printf("%d",p);
            count++;
        }
        p++;
    }
}

即使你可以通过递减'n'来摆脱“count”变量。并且通过考虑偶数不是素数(或者所有质数都是6n + 1或6n-1)的事实来优化这段代码。