【问题标题】:Creating a function to check if a number is Palindrome创建一个函数来检查一个数字是否是回文
【发布时间】:2020-06-22 14:38:19
【问题描述】:

我正在尝试创建一个函数,如果数字是回文则返回 true,如果数字不是,则返回 false,所以首先我创建了一个反转数字的函数,然后创建另一个函数来判断反转的数字是否等于原始号码,但它没有为我返回正确的输出,有什么帮助吗?

 #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <math.h>
    //Reversing a number
    int DigitsReversing(int num)
    {
        int resultofR = 0;
        while (num > 0)
        {
            resultofR = resultofR * 10 + num % 10;
            num = num / 10;
        }
        return resultofR;
    }
    //telling if the original number equal to the reversed number if yes return if not return false
    int isPali(int num)
    {

        DigitsReversing(num);
        int resultofR;
        if (num == resultofR)
            return true;
        else
            return false;
        return 0;


    }

    //calling the function 
    int main()
    {
        int num;
        scanf("%d", &num);
        printf("%d", isPali(num));
        return 0;
    }

编辑****:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
int DigitsReversing(int num)
{
    int resultofR = 0;
    while (num > 0)
    {
        resultofR = resultofR * 10 + num % 10;
        num = num / 10;
    }
    return resultofR;
}


bool isPali(int num , int resultofR)
{
    resultofR = DigitsReversing(num);
    if (num == resultofR)
        return true;
    else
        return false;


}


int main()
{
    int num, resultofR;
    scanf("%d", &num);
    resultofR = DigitsReversing(num);
    isPali(num, resultofR);

【问题讨论】:

  • 请以tour 开头并阅读How to Ask。特别是“它不起作用”不是您应该在此处的问题中使用的描述。
  • 您正在调用 DigitsReversing() 并且没有使用返回值。

标签: c algorithm palindrome


【解决方案1】:

C 确实有一个布尔数据类型。通常,0 为假,1 为真。它们返回值 1 表示真,0 表示假。 正如@exnihilo 和@bob__ 所建议的那样,C 确实有布尔数据类型。

#include<stdio.h>
#include<math.h>
//Reversing a number
int DigitsReversing(int num)
{
    int resultofR = 0;
    while (num > 0)
    {
        resultofR = resultofR * 10 + num % 10;
        num = num / 10;
    }
    return resultofR;
}
//telling if the original number equal to the reversed number if yes return if not return false
void isPali(int num)
{
    int resultofR= DigitsReversing(num);
    if (num == resultofR)
        printf("True");
    else
    printf("False");


}

//calling the function 
int main()
{
    int num;
    scanf("%d",&num);
    isPali(num);
    return 0;
}

输出 对于非回文数。

9998
False
--------------------------------
Process exited after 10.35 seconds with return value 0
Press any key to continue . . .

对于回文数。

9999
True
--------------------------------
Process exited after 10.35 seconds with return value 0
Press any key to continue . . .

【讨论】:

  • 你能检查我编辑的代码吗?我需要专门返回 true 或 false 而不是 1 或零...我编辑了代码并包含了 stdbool 库
  • 您编辑的代码是错误的,对于传递给它的任何数字,它都会返回 true。因为您在一个号码上使用了两次DigitsReversing。您可以通过将 1 替换为 true 并将 0 替换为 false 并包含 &lt;stdbool.h&gt; 来使用我的编辑我的代码。
  • 我尝试替换并包含 它仍然返回 1 和 0
  • "C 没有布尔数据类型" -- what about bool and _Bool?
  • bool 是 _Bool 的 typedef,而在底层 _Bool 是一个整数类型(因此会受到整数提升,这可能会引起一些混乱),但 @987654332 @ 仍然是 C 中的原生布尔类型,即,_Bool 不是任何东西的 typedef。
【解决方案2】:

发布的 sn-ps 显示了一些对基本主题的混淆,例如将参数传递给函数并收集返回值的正确方法,或者只是“输出”和“返回”值之间的差异。

考虑一下,例如:

bool isPali(int num , int resultofR)
{ //                      ^^^^^^^^^           It's passed to the function...
    resultofR = DigitsReversing(num);  // <-  and immediately overwritten by another value   
    if (num == resultofR)
        return true;
    else
        return false;
}

int main()
{
    int resultofR;
    // ...
    resultofR = DigitsReversing(num);  // <-- This is effectually called twice
    isPali(num, resultofR);            // <-- The returned value is ignored       
}

你只需要写一个函数

#include <stdbool.h>

bool is_palindrome(long num)
{
    long reversed = 0;

    for (long i = num; i > 0; i /= 10)
    {
        reversed = reversed * 10 + i % 10;
    }
    return reversed == num;
}

然后,调用它并正确解释其返回值,以生成所需的输出

int number;
scanf("%d", &number);
printf("%s\n", is_palindrome(number) ? "True" : "False");

【讨论】:

  • 感谢您抽出宝贵时间让我们理解。真的很感激。了解您要解释的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多