【问题标题】:How to find if a number is a palindrome?如何判断一个数字是否是回文?
【发布时间】:2023-03-12 00:22:01
【问题描述】:

这是我的代码:

#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[]中的第一个,然后比较索引中的数字。

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

【问题讨论】:

  • 顺便说一句,这叫做回文。
  • 您需要提供有关错误的更多信息。
  • for(unsigned int i=(n-1); i&gt;=0 ; i--) - 嗯。 unsigned int 将总是 大于或等于零。也许for(unsigned int i=n; i--;) 会做你想做的事。

标签: c palindrome


【解决方案1】:

您可以使用以下代码来查找数字是否为回文。如果数字是回文,该方法返回 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;
    }

【讨论】:

    【解决方案2】:

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

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

    现在,是时候优化它了。如果我们在字符串的中间放一个镜子,镜子的左边会变成右边的镜像,这就是思路优化。

    现在取两个索引:low和high,其中low指向字符串最左边的字符,high 指向字符串最右边的字符。并执行以下操作:

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

    现在,如果 low 的值大于 high 的值,则表示字符串是回文(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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多