如何找到一个数字是回文?

时间:2015-05-23 16:07:44

标签: c palindrome

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int n;
    unsigned long series[100], beck[100];
    int j=0, num=0,temp=0,notflin=0;

    printf("Please enter the length_of the series :\n");

    printf("Please enter the series :\n");
    scanf("%u",&n);

    for(unsigned int f=0; f<n; f++)
    {   series[f]=0;
        scanf("%lu",&series[f]);
    }
        printf("check");
        printf("%u",n);

    for(unsigned int i=(n-1); i>=0 ; i--)
    {
        num=0;
        num=series[i];
        temp=0;
        if (num)
        {
            while((double) num/10!=0)
            {
            temp*=10;
            temp+=(num%10);
            num/=10;
            }
        }

        beck[j]=0;
        beck[j]=temp;
        j++;

    }

    unsigned int s=0,d=0;
    while(1)
    {
        unsigned long num1=0, number=0;
        number=(series[n-1-d]%10);
        num1=(beck[n-1-s]%10);
        if (number!=num1)
        {
            notflin=1;
            break;
        }
        series[n-1-d]/=10;
        beck[n-1-s]/=10;

        if(beck[n-1-s]==0)
            s++;
        if(series[n-1-d]==0)
            d++;
        if (d==(n-1)||s==(n-1))
            break;
    }

    printf(notflin==0? "Yes\n":"No\n");

    return 0;
}

我尝试输入unsigned long beck[]的输入,以便最后一个索引中的数字成为unsigned long series[]中的第一个,然后比较索引中的数字。

当我尝试运行代码时,它会卡住。有什么问题?

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码查找数字是否为回文数据。如果数字是回文,则该方法返回0,否则返回-1 -

public int isPalindrome(int number) {

        int temp = number;
        int reverseNumber = 0;
        int rem = 0;

        while (temp != 0) {
            int rem = temp % 10;
            reverseNumber = reverseNumber * 10 + rem;
            temp = temp / 10;
        }

        // if 'number' and reverse of number is equal means
        if (number == reverse) {
            return 0;
        }
        return -1;
    }

答案 1 :(得分:0)

让我们考虑一个案例:
123321 (输入值)

众所周知,这个数字是回文数据。现在,观察一件事,第一个字符(从左侧)等于第一个字符(从右侧)。类似地,第二个字符(从左侧)等于第二个字符(从右侧)。等等....如果此属性适用于字符串中的每个索引,则该字符串称为回文。

现在,时间来优化它。如果我们在镜子的中间放一面镜子,镜子的左侧将成为右侧的镜像,这给出了想法优化。

现在取两个索引:,其中指向字符串最左边的字符,指向字符串的最右侧字符。并做如下:

while(low <= high) {
    if(value at low index == value at high index) {
        low++;
        high--;
    } else {
        break;
    }
}

现在,如果的值大于的值,则表示字符串是回文(HOW ???)。仔细想想,并在评论部分告诉我。

您可能会发现此代码段有用:

#include<stdio.h>
#include<string.h>

char str[100005]={0};

int main() {
    printf("Enter a number or string to be verified  :    ");
    scanf("%s",str);

    int len = strlen(str);

    int low = 0;
    int high = len -1;

    while(low <= high) {
        if(str[low] == str[high]) {
            low++;
            high--;
        } else {
            break;
        }
    }

    if(low < high) {
        printf("No !!! The input string is not palindorme ");
    } else {
        printf("Indeed !!! String is palindorme ");
    }

    return 0;
}