#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/