首页 > 解决方案 > 如何修复此代码以使用指针检查数字是否为回文?

问题描述

我对 C 很陌生。我真的不明白如何正确处理指针。我知道它可以在没有指针的情况下完成,但我必须使用它们

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

void palindrome(int *n)
{
   int ok=0,*p,*m;
    m=n;
    while(*n!=0)
    {
        *p=*p*10+*n%10;
        *n=*n/10;
    }
    if (*m==*p) ok=1;
    if (*m!=*p) ok=0;

    if (ok==1)
        printf("Number is palindrome.");
    if (ok==0)
        printf("Number is not palindrome");
}

int main()
{
    int n;
    printf("Give value to n: ");
    scanf("%d",&n);

    palindrome(n);


}

预期结果将是,例如,数字 212 是回文,数字 312 不是回文

标签: cpointersnumberspalindrome

解决方案


这是代码。我认为您应该在实际使用指针之前尝试了解指针的工作原理。我不想为您提供代码,但由于您是新手,所以我提供了一个工作代码。尝试了解它是如何工作的,而不是仅仅将此代码复制粘贴到您必须放置的位置。

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

void palindrome(int *n)
{
   int ok=0;
   int *p = (int *)malloc(sizeof(int));
   int *m = (int *)malloc(sizeof(int));
   *p=0;
    *m=*n;
    while(*n!=0)
    {
        *p=*p*10+*n%10;
        *n=*n/10;
    }
    if (*m==*p) ok=1;
    if (*m!=*p) ok=0;

    if (ok==1)
        printf("Number is palindrome.");
    if (ok==0)
        printf("Number is not palindrome");
}

int main()
{
    int n;
    printf("Give value to n: ");
    scanf("%d",&n);
    palindrome(&n);
    return 0;

}

推荐阅读