Рубрики

Проверьте, является ли число палиндромом

Учитывая целое число, напишите функцию, которая возвращает истину, если заданное число — палиндром, иначе ложь. Например, 12321 — это палиндром, а 1451 — не палиндром.

Пусть данное число будет num . Простой метод решения этой проблемы — сначала изменить цифры num , а затем сравнить число num с num . Если оба одинаковы, вернуть true, иначе false.

Ниже приведен интересный метод, основанный на методе № 2 этого поста. Идея состоит в том, чтобы создать копию num и рекурсивно передать копию по ссылке и передать num по значению. В рекурсивных вызовах разделите число на 10, перемещаясь по дереву рекурсии. При перемещении вверх по дереву рекурсии разделите копию на 10. Когда они встретятся в функции, для которой завершены все дочерние вызовы, последняя цифра num будет i-й цифрой с начала, а последняя цифра копии будет i-й цифрой с конец.

C ++

// Рекурсивная программа C ++ для проверки, является ли данное число
// палиндром или нет
#include <stdio.h>

  
// Функция, которая возвращает true только если num содержит одну цифру

int oneDigit(int num)

{

    // операция сравнения быстрее, чем операция деления.

    // Поэтому вместо «return num / 10 == 0;» используем следующее

    return (num >= 0 && num < 10);

}

  
// Рекурсивная функция для определения, является ли num палиндромом
// или не. Изначально dupNum содержит адрес копии num.

bool isPalUtil(int num, int* dupNum)

{

    // Базовый случай (необходим для завершения рекурсии): этот оператор

    // в основном сравнивает первую цифру с последней цифрой

    if (oneDigit(num))

        return (num == (*dupNum) % 10);

  

    // Это ключевая строка в этом методе. Обратите внимание, что все рекурсивные

    // вызовы имеют отдельную копию num, но все они имеют одну и ту же копию

    // из * dupNum. Делим число при перемещении вверх по дереву рекурсии

    if (!isPalUtil(num/10, dupNum))

        return false;

  

    // Следующие операторы выполняются, когда мы движемся вверх

    // дерево рекурсивного вызова

    *dupNum /= 10;

  

    // На этом этапе, если num% 10 содержит i-ю цифру от начала,

    // then (* dupNum)% 10 содержит i-ю цифру с конца

    return (num % 10 == (*dupNum) % 10);

}

  
// Основная функция, которая использует рекурсивную функцию isPalUtil () для
// узнаем, является ли num палиндромом или нет

int isPal(int num)

{

    // Если num отрицательно, сделать его положительным

    if (num < 0)

       num = -num;

  

    // Создаем отдельную копию num, чтобы сделанные изменения

    // по адресу dupNum не меняем номер ввода.

    int *dupNum = new int(num); // * dupNum = num

  

    return isPalUtil(num, dupNum);

}

  
// Программа драйвера для проверки вышеуказанных функций

int main()

{

    int n = 12321;

    isPal(n)? printf("Yesn"): printf("Non");

  

    n = 12;

    isPal(n)? printf("Yesn"): printf("Non");

  

    n = 88;

    isPal(n)? printf("Yesn"): printf("Non");

  

    n = 8999;

    isPal(n)? printf("Yesn"): printf("Non");

    return 0;

}

Джава

// Рекурсивная Java-программа для
// проверяем, соответствует ли данное число
// палиндром или нет

import java.io.*;

import java.util.*;

   

public class CheckPallindromNumberRecursion {

   

    // Функция, которая возвращается true

    // только если num содержит одну цифру

    public static int oneDigit(int num) {

   

        if ((num >= 0) && (num < 10))

            return 1;

        else

            return 0;

    }

   

    public static int isPalUtil

    (int num, int dupNum) throws Exception {

   

        // базовое условие для возврата, как только мы

        // переместиться за первую цифру

        if (num == 0) {

            return dupNum;

        } else {

            dupNum = isPalUtil(num / 10, dupNum);

        }

   

        // Проверка на равенство первой цифры

        // num и dupNum

        if (num % 10 == dupNum % 10) {

            // если первые цифры значения num и

            // dupNum равно делить dupNum

            // значение на 10, чтобы продолжать двигаться синхронно

            // с числом

            return dupNum / 10;

        } else {

            // В позиции значения не

            // соответствие броска исключения и выхода.

            // нет необходимости продолжать.

            throw new Exception();

        }

   

    }

   

    public static int isPal(int num) 

    throws Exception {

   

        if (num < 0)

            num = (-num);

   

        int dupNum = (num);

   

        return isPalUtil(num, dupNum);

    }

   

    public static void main(String args[]) {

   

        int n = 1242;

        try {

            isPal(n);

            System.out.println("Yes");

        } catch (Exception e) {

            System.out.println("No");

        }

        n = 1231;

        try {

            isPal(n);

            System.out.println("Yes");

        } catch (Exception e) {

            System.out.println("No");

        }

   

        n = 12;

        try {

            isPal(n);

            System.out.println("Yes");

        } catch (Exception e) {

            System.out.println("No");

        }

   

        n = 88;

        try {

            isPal(n);

            System.out.println("Yes");

        } catch (Exception e) {

            System.out.println("No");

        }

   

        n = 8999;

        try {

            isPal(n);

            System.out.println("Yes");

        } catch (Exception e) {

            System.out.println("No");

        }

    }

}

   
// Этот код добавлен
// Насир Дж

python3

# Рекурсивная программа Pyhton3 для проверки
# является ли данное число палиндромом или нет

  
# Функция, которая возвращается
# только если num содержит одну цифру

def oneDigit(num):

      

    # операция сравнения быстрее

    # чем операция деления. Так

    # используя следующее вместо

    # "return num / 10 == 0;"

    return ((num >= 0) and

            (num < 10));

  
# Рекурсивная функция для поиска
# out, является ли число палиндромом
# или не. Изначально dupNum
# содержит адрес копии num.

def isPalUtil(num, dupNum):

      

    # Базовый случай (необходим для рекурсии

    # прекращение): это утверждение

    # в основном сравнивает первую цифру

    # с последней цифрой

    if (oneDigit(num)):

        return (num == (dupNum) % 10);

  

    # Это ключевая строка в этом

    # метод. Обратите внимание, что все рекурсивные

    # звонки имеют отдельную копию

    # num, но все они одни и те же

    # копия * dupNum. Мы делим число

    # при движении вверх по дереву рекурсии

    if (isPalUtil(int(num / 10), dupNum) == False):

        return -1;

  

    # Следующие утверждения

    # выполняется, когда мы движемся вверх

    # дерево рекурсивных вызовов

    dupNum = int(dupNum / 10);

  

    # На данный момент, если num% 10

    # содержит i-ю цифру из

    # beiginning, затем (* dupNum)% 10

    # содержит i-ю цифру от конца

    return (num % 10 == (dupNum) % 10);

  
# Основная функция, которая использует
# рекурсивная функция isPalUtil ()
# чтобы узнать, является ли num
# палиндром или нет

def isPal(num):

    # Если число отрицательное,

    # сделать это позитивным

    if (num < 0):

        num = (-num);

  

    # Создать отдельную копию

    # число, так что модификации

    # сделано по адресу dupNum

    # не меняйте введенный номер.

    dupNum = (num); # * dupNum = num

  

    return isPalUtil(num, dupNum);

  
Код водителя

n = 12321;

if(isPal(n) == 0):

    print("Yes");

else:

    print("No");

  

n = 12;

if(isPal(n) == 0):

    print("Yes");

else:

    print("No");

  

n = 88;

if(isPal(n) == 1):

    print("Yes");

else:

    print("No");

  

n = 8999;

if(isPal(n) == 0):

    print("Yes");

else:

    print("No");

  
# Этот код предоставлен mits

C #

// Рекурсивная программа на C # для
// проверяем, соответствует ли данное число
// палиндром или нет

using System;

  

class GFG

{

      
// Функция, которая возвращается true
// только если num содержит одну цифру

public static int oneDigit(int num)

{

    // операция сравнения

    // быстрее деления

    // операция. Итак, используя

    // следуем вместо

    // "return num / 10 == 0;"

    if((num >= 0) &&(num < 10))

    return 1;

    else

    return 0;

}

  
// Рекурсивная функция для
// узнаем, является ли num
// палиндром или нет.
// Изначально dupNum содержит
// адрес копии номера.

public static int isPalUtil(int num, 

                            int dupNum)

{

    // Базовый случай (необходим для рекурсии

    // завершение): это утверждение

    // в основном сравнивает первую цифру

    // с последней цифрой

    if (oneDigit(num) == 1)

        if(num == (dupNum) % 10)

        return 1;

        else

        return 0;

  

    // Это ключевая строка в

    // Этот метод. Обратите внимание, что

    // все рекурсивные вызовы имеют

    // отдельная копия num,

    // но все они одни и те же

    // копия * dupNum. Мы делим

    // num при движении вверх

    // рекурсивное дерево

    if (isPalUtil((int)(num / 10), dupNum) == 0)

        return -1;

  

    // Следующие утверждения

    // выполняются, когда мы двигаемся

    // вверх по дереву рекурсивного вызова

    dupNum = (int)(dupNum / 10);

  

    // На данный момент, если num% 10

    // содержит i-ю цифру из

    // начало, затем (* dupNum)% 10

    // содержит i-ю цифру от конца

    if(num % 10 == (dupNum) % 10) 

        return 1; 

    else

        return 0;

}

  
// Основная функция, которая использует
// рекурсивная функция isPalUtil ()
// чтобы узнать, является ли num
// палиндром или нет

public static int isPal(int num)

{

    // Если num отрицательно,

    // сделать это положительным

    if (num < 0)

    num = (-num);

  

    // Создать отдельную копию

    // из числа, так что модификации

    // сделано по адресу dupNum

    // не меняем номер ввода

    int dupNum = (num); // * dupNum = num

  

    return isPalUtil(num, dupNum);

}

  
// Код драйвера

public static void Main()

{

int n = 12321;

if(isPal(n) == 0)

    Console.WriteLine("Yes");

else

    Console.WriteLine("No");

  
n = 12;

if(isPal(n) == 0)

    Console.WriteLine("Yes");

else

    Console.WriteLine( "No");

  
n = 88;

if(isPal(n) == 1)

    Console.WriteLine("Yes");

else

    Console.WriteLine("No");

  
n = 8999;

if(isPal(n) == 0)

    Console.WriteLine("Yes");

else

    Console.WriteLine("No");

}
}

  
// Этот код предоставлен mits

PHP

<?php
// Рекурсивная PHP-программа для
// проверяем, соответствует ли данное число
// палиндром или нет

  
// Функция, которая возвращается true
// только если num содержит одну цифру

function oneDigit($num)

{

    // операция сравнения быстрее

    // чем операция деления. Так

    // используя следующее вместо

    // "return num / 10 == 0;"

    return (($num >= 0) && 

            ($num < 10));

}

  
// Рекурсивная функция для поиска
// out, является ли num палиндромом
// или не. Изначально dupNum
// содержит адрес копии num.

function isPalUtil($num, $dupNum)

{

    // Базовый случай (необходим для рекурсии

    // завершение): это утверждение

    // в основном сравнивает первую цифру

    // с последней цифрой

    if (oneDigit($num))

        return ($num == ($dupNum) % 10);

  

    // Это ключевая строка в этом

    // метод. Обратите внимание, что все рекурсивные

    // звонки имеют отдельную копию

    // num, но все они одни и те же

    // копия * dupNum. Мы делим число

    // при движении вверх по дереву рекурсии

    if (!isPalUtil((int)($num / 10), 

                         $dupNum))

        return -1;

  

    // Следующие операторы

    // выполняется, когда мы движемся вверх

    // дерево рекурсивного вызова

    $dupNum = (int)($dupNum / 10);

  

    // На данный момент, если num% 10

    // содержит i-ю цифру из

    // начало, затем (* dupNum)% 10

    // содержит i-ю цифру от конца

    return ($num % 10 == ($dupNum) % 10);

}

  
// Основная функция, которая использует
// рекурсивная функция isPalUtil ()
// чтобы узнать, является ли num
// палиндром или нет

function isPal($num)

{

    // Если num отрицательно,

    // сделать это положительным

    if ($num < 0)

    $num = (-$num);

  

    // Создать отдельную копию

    // num, так что модификации

    // сделано по адресу dupNum

    // не меняем номер ввода

    $dupNum = ($num); // * dupNum = num

  

    return isPalUtil($num, $dupNum);

}

  
// Код драйвера

$n = 12321;

if(isPal($n) == 0)

    echo "Yes\n";

else

    echo "No\n";

  

$n = 12;

if(isPal($n) == 0)

    echo "Yes\n";

else

    echo "No\n";

  

$n = 88;

if(isPal($n) == 1)

    echo "Yes\n";

else

    echo "No\n";

  

$n = 8999;

if(isPal($n) == 0)

    echo "Yes\n";

else

    echo "No\n";

  
// Этот код предоставлен m_kit
?>


Выход:

Yes
No
Yes
No

Чтобы проверить число палиндром или нет без использования дополнительного места

Эта статья составлена Aashish Barnwal . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Проверьте, является ли число палиндромом

0.00 (0%) 0 votes