c - 为什么这个反向函数在for循环中不起作用?

标签 c

#include <stdio.h>
#include <math.h>
int prime (long n);
long reverse(long n);
int main(void)
{
    long n;
    long i, j;
    puts("Enter n dight number, and we will help you find symmetrical prime number");
    scanf("%ld", &n);
    for (i = 11; i < (pow(10, n) - 1); i+= 2)
    {
        if (prime(i))
        {
            j = reverse(i);
            if (i == j)
            {
                printf("%ld\n", i);
            }
        }        
    }
}

int prime (long n) //estimate whether the number n is primer number
{
    int status = 0;
    int j;
    //1 is prime, 0 is not
    if (n % 2 == 0 || n == 3)
    {
        if (n == 2)
            status = 1;
        if (n == 3)
            status = 1;
        else
        {
            n++;
            status = 0;
        }
    }
    else
    {
        j = 3;
        while (j <= sqrt(n))
        {
            if (n % j == 0)
            {
                status = 0;
                break;
            }            
            else
                status = 1;
            j+= 2;
        }
    }
    return status;
}

long reverse(long n)    //reverse a number 
{
    int i, j, x;
    long k, sum;
    int digit = 0;
    int ar[1000];
    while (n > 0)
    {    
        k = n;
        n = n / 10;
        x = (k - n*10);
        digit++;
        ar[digit] = x;
    }

    for (i = 1,j = digit - 1; i <= digit; i++, j--)
    {
        sum += ar[i] * pow(10, j)
    } 

    return sum;

}

我构建了一个反转函数来反转数字,例如,214 到 412。 这个函数在个人号上很好用,比如我输入reverse(214),返回412,很好。但是当我将 reverse() 函数与 for 循环结合使用时,该函数无法工作...它会产生一些奇怪的数字...

那么我该如何解决这个问题呢?

最佳答案

反向功能极其复杂。更好的方法是:

long reverse (long n)
{
    long result = 0;
    while (n != 0)
    {
        result *= 10;
        result += n % 10;
        n /= 10;
    }
    return result;
}

我认为您的代码中的问题在于以下部分

  digit++;
  ar[digit] = x;

您首先增加位置然后分配给它,从而使 ar[0] 未初始化。

关于c - 为什么这个反向函数在for循环中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38306981/

相关文章:

c - MS3D 解析 : boneID == joint ID?

c++ - 有什么理由在Arduino中编写我自己的库吗?

c - 在 C 中解析 HTTP 请求行

c - Visual Studio : "No source file" in Disassembly

c - 为什么参数的函数大小增加到字大小?

c - 用 strcmp() 解释这个用于字符串比较的 C 宏

C: 使用 Fork() 和 Pipe() 在子进程中添加数字

无法指向从 C 中的文件读取的结构

将 char 数组转换为整数 C 编程

c - 双向链表的一个节点中可以有多个元素吗?