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

Это звучит как домашнее задание, да, это (кого-то другого) , я попросил своего друга, изучающего C #, одолжить мне некоторые из его классных упражнений, чтобы освоить это.

Итак, как сказано в заголовке: как я могу проверить, является ли число палиндромом?

Я не прошу исходный код (хотя он очень полезен), а скорее, чтобы кто-то объяснил, как должен работать код, чтобы его можно было применять ко многим различным языкам.

Решение:

n = num; while (num > 0) < dig = num % 10; rev = rev * 10 + dig; num = num / 10; >// If (n == rev) then num is a palindrome
Fábio Antunes 23 Ноя 2009 в 23:43

Вы хотите проверить, является ли число палиндромом, или на самом деле искать палиндромные числа в гораздо большем числе? Разница в нескольких строках кода (если что) для многих других.

23 Ноя 2009 в 23:55

Просто проверьте, является ли данное число палиндромом. Не искать их в диапазоне чисел, например: от 1000 до 9000.

Fábio Antunes
24 Ноя 2009 в 00:08
24 Ноя 2009 в 00:11
Ребята, вы потрясающие, благодаря всем вашим усилиям я сделал это.
Fábio Antunes

Математические операции для поиска палиндрома

24 Ноя 2009 в 00:30

Если кому интересно. Код C# загружает числа из XML-файла и проверяет, является ли каждое число палиндромным или нет.

Fábio Antunes
24 Ноя 2009 в 00:52

16 ответов

Лучший ответ

Я проверяю наличие палиндромов, преобразовывая целое число в строку, затем переворачивая строку, а затем сравнивая равенство. Это будет лучший подход для вас, поскольку вы только начинаете.

Поскольку вы работаете на C #, и это домашнее задание, я буду использовать очень малоизвестный Python, который вам не поможет:

def is_palindrome(i): s = str(i) return s[::-1] == s

Преобразуйте это в C #, и вы получите свой ответ.

Jed Smith 24 Ноя 2009 в 00:09

«Поскольку вы работаете на C#, я буду использовать очень непонятный Python, который вам не поможет: «Сделал мой день.

Mercurybullet
23 Ноя 2009 в 23:49
Умный — возможно, немного излишний, но простой для понимания и программирования. хорошее решение.
23 Ноя 2009 в 23:50
Жду ответа от Brainfuck — это будет еще более неясно 🙂

23 Ноя 2009 в 23:50
Перебор? Если это перебор, то что недобор?
23 Ноя 2009 в 23:55
23 Ноя 2009 в 23:57

Input number: 12321 Splitting the digits of the number, put them into an array => array [1, 2, 3, 2, 1] Check if array[x] = array[arr_length — x] for all x = 0..arr_length / 2 If check passed => palindrome
schnaader 24 Ноя 2009 в 13:45
+1 за прямой ответ, который не выдает код.
24 Ноя 2009 в 00:24

Есть много способов. Наверное, самый простой — иметь 2 индекса, i в начале и j в конце номера. Вы проверяете, есть ли [i] == a [j].

Если да, увеличивайте i и уменьшайте j. Вы останавливаетесь, когда i> j. Если при зацикливании вы когда-нибудь достигнете точки, где a [i]! = A [j], то это не палиндром.

dcp 23 Ноя 2009 в 23:47

Вы можете сэкономить раунд в 50% случаев, проверив, если i >= j вместо i > j , так как если i == j , n[i] == n[j]

Читайте также:
Как работать в программе катарсис

Python program to check whether a number is palindrome or not.||palindrome number in python.

Matthew Scharley
24 Ноя 2009 в 00:12

Что-то вроде этого

bool IsPalindrome(int num) < var str = num.ToString(); var length = str.Length; for (int i = 0, j = length — 1; length/2 >i; i++, j— ) < if (str[i] != str[j]) return false; >return true; >

Можно даже оптимизировать

fs_dm 27 Янв 2022 в 19:03

bool IsPalindrome(string str)
Rezo Megrelidze 12 Июл 2014 в 22:54
Хорошее рекурсивное прикосновение!
Manish Jain
19 Авг 2014 в 09:53

Этот не игнорирует случай
22 Сен 2016 в 17:45

Вот какой-то псевдокод:

function isPalindrome(number) returns boolean index = 0 while number != 0 array[index] = number mod 10 number = number div 10 index = index + 1 startIndex = 0; endIndex = index — 1 while startIndex > endIndex if array[endIndex] != array[startIndex] return false endIndex = endIndex — 1 startIndex = startIndex + 1 return true

Обратите внимание, что это для базы 10. Измените две десятки в первом цикле while для других баз.

Moishe Lettvin 23 Ноя 2009 в 23:53

Вы можете сделать это без выделения памяти, исключив массив, если понимаете, что делает преобразование строк. Это то, что я пытался показать.

Moishe Lettvin
24 Ноя 2009 в 00:27

Следующая функция будет работать как для чисел, так и для строк.

public bool IsPalindrome(string stringToCheck)
Zamir 3 Фев 2011 в 23:41

Теоретически вы хотите преобразовать число в строку. затем преобразовать строку в массив символов и зациклить массив, сравнивая символ (i) с символом (длина массива — i), если два символа не равны, выйдите из цикла и верните false. если он проходит через цикл, это палиндром.

ctrlShiftBryan 23 Ноя 2009 в 23:47

Интересный. Я бы, вероятно, преобразовал число в строку, а затем написал бы рекурсивную функцию, чтобы решить, является ли данная строка календарным.

echo 23 Ноя 2009 в 23:48

int n = check_textbox.Text.Length; int check = Convert.ToInt32(check_textbox.Text); int m = 0; double latest=0; for (int i = n — 1; i>-1; i—) < double exp = Math.Pow(10, i); double rem = check / exp; string rem_s = rem.ToString().Substring(0, 1); int ret_rem = Convert.ToInt32(rem_s); double exp2 = Math.Pow(10, m); double new_num = ret_rem * exp2; m=m+1; latest = latest + new_num; double my_value = ret_rem * exp; int myvalue_int = Convert.ToInt32(my_value); check = check — myvalue_int; >int latest_int=Convert.ToInt32(latest); if (latest_int == Convert.ToInt32(check_textbox.Text)) < MessageBox.Show(«The number is a Palindrome number»,»SUCCESS»,MessageBoxButtons.OK,MessageBoxIcon.Information); >else
Ajai 1 Дек 2015 в 14:05

Хороший ответ. Пожалуйста, добавьте некоторое объяснение, почему и как это отвечает на вопрос, чтобы сделать его еще лучше.

1 Дек 2015 в 14:09

public class Main < public static boolean Ispalindromic(String word) < if (word.length() < 2) < return true; >else if (word.charAt(0) != word.charAt(word.length() — 1)) < return false; >else < Ispalindromic(word.substring(1, word.length() — 1)); >return true; > public static void main(String args[]) < Scanner sc = new Scanner(System.in); String word = sc.nextLine(); System.out.println(Ispalindromic(word) ? «it is palidromic» : «it is not palidromic»); >>
Samet ÖZTOPRAK 15 Авг 2017 в 12:00

Это мое решение от новичка:

Console.Write(«Enter a number to check if palindrome: «); bool palindrome = true; int x = int.Parse(Console.ReadLine()); /* c is x length minus 1 because when counting the strings length it starts from 1 when it should start from 0*/ int c = x.ToString().Length — 1; string b = x.ToString(); for (int i = 0; i < c; i++) if (b[i] != b[c — i]) palindrome = false; if (palindrome == true) Console.Write(«Yes»); else Console.Write(«No»); Console.ReadKey();
Kedem G 25 Авг 2018 в 01:46

Вам нужно перевернуть число, а затем сравнить результат с исходным числом. Если он совпадает, у вас есть палиндром. Он должен работать независимо от того, является ли число четным, нечетным или симметричным.

Читайте также:
Кому отправляют сообщения в программе winsent messenger

public static bool IsNumberAPalindrome(long num)
user3162879 30 Дек 2019 в 20:41
public bool IsPalindrome(int x) < string test = string.Empty; string res = string.Empty; test = x.ToString(); var reverse = test.Reverse(); foreach (var c in reverse) < res += c.ToString(); >return test == res; >
MartenCatcher 1 Мар 2020 в 18:15

  1. У вас есть строка, она может содержать целые числа или символы, не имеет значения.
  2. Вы преобразуете эту строку в массив, в зависимости от того, из каких типов символов состоят строки, это может использоваться для метода toCharArray или любого другого связанного метода.
  3. Затем вы используете обратный метод, который предоставляет .NET, для реверсирования вашего массива, теперь у вас есть два массива, исходный и тот, который вы перевернули.
  4. Затем вы используете оператор сравнения (НЕ ОПЕРАТОР ПРИЗНАЧЕНИЯ!), Чтобы проверить, совпадает ли обратный оператор с исходным.

Neil Meyer 12 Апр 2021 в 17:55

Вот рабочий код. Первая функция проверяет, является ли число палидромным, преобразуя его в строку, а затем в IEnumerable и проверяя, равно ли оно обратной стороне. Этого достаточно, чтобы ответить на ваш вопрос. Функция main просто перебирает целые числа, проверяя их одно за другим.

using System; using System.Collections.Generic; using System.Linq; class Program < public static bool IsPalindromic(long l) < IEnumerableforwards = l.ToString().ToCharArray(); return forwards.SequenceEqual(forwards.Reverse()); > public static void Main() < long n = 0; while (true) < if (IsPalindromic(n)) Console.WriteLine(«» + n); n++; >> >

Обновление: вот более прямой метод создания палиндромов. Он не проверяет числа по отдельности, он просто генерирует палиндромы напрямую. Это не очень полезно для ответа на домашнее задание, но, возможно, вам это все равно будет интересно:

using System; using System.Collections.Generic; using System.Linq; class Program < public static void Main() < bool oddLength = true; ulong start = 1; while (true) < for (ulong i = start; i < start * 10; ++i) < string forwards = i.ToString(); string reverse = new string(forwards.ToCharArray() .Reverse() .Skip(oddLength ? 1 : 0) .ToArray()); Console.WriteLine(forwards + reverse); >oddLength = !oddLength; if (oddLength) start *= 10; > > >
Mark Byers 24 Ноя 2009 в 00:36

Почему бы и нет? Он сказал, что это будет полезно, поэтому я предоставил его. Если он предпочитает сначала разобраться сам, ничто не заставляет его заглянуть сюда.

Источник: question-it.com

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

Всем привет! Помогите пожалуйста объяснить с 20-ой строки firstDigit=temp1/10000; и до fifthDigit=temp1;, а конкретнее почему делят и используют remainder с цифрами 10000;1000;100. Это код для определения пятизначного палиндром числа.Спасибо за внимание.

#include using namespace std; int main() < int number; int temp1; int temp2; int firstDigit; int secondDigit; int fourthDigit; int fifthDigit; printf(«Enter a five-digit number: «); scanf(«%d», temp1=number; firstDigit=temp1/10000; temp2=temp1%10000; secondDigit=temp2/1000; temp1=temp2%1000; temp2=temp1%100; fourthDigit=temp2/10; temp1=temp2%10; fifthDigit=temp1; if(firstDigit==fifthDigit)< if(secondDigit==fourthDigit)< printf(«%d is a palindromen»,number); >else < printf(«%d is not a palindromen»,number); >> else < printf(«%d is not a palindromen»,number); >system(«pause»); return 0; >
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор
Последний раз редактировалось Serge_Bliznykov; 01.02.2017 в 14:55 .
Регистрация: 09.01.2008
Сообщений: 26,238
а конкретнее почему делят и используют remainder с цифрами 10000

делением получают первую цифру пятизначного числа

temp2=temp1%10000;

в temp2 получают число уже без первой цифры (последние 4-ре цифры числа)

secondDigit=temp2/1000; temp1=temp2%1000;

secondDigit — получаем вторую цифру исходного числа (первая цифра в оставшемся четырёхзначном, которое получили на предыдущем шаге в temp2

temp1 — остаток — это уже трёхзначное число

p.s. кстати, данный код не красивый (много лишних переменных) и не универсальный (рассчитан только на пятизначные числа).

Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793
Мне кажется, что пропустили деление на «100»:

Читайте также:
Посудомоечная машина работает дольше программы

secondDigit=temp2/100;
А ну запусти программу и проверь результаты на каком-нибудь контрольном примере.
Регистрация: 01.02.2017
Сообщений: 3
Ясно.Благодарю
Регистрация: 09.01.2008
Сообщений: 26,238
Мне кажется, что пропустили деление на «100»:
secondDigit=temp2/100;

Юра, не запутываете человека, он и сам запутается!
Вы ошибаетесь. ничего там на 100 делить НЕ НАДО.
(деление на 100 может дать ТРЕТЬЮ цифру числа.
она находится в середине, поэтому для проверки, является ли число палиндромом, эта цифра НЕ НУЖНА.
поэтому она и не извлекается из числа).

Участник клуба
Регистрация: 14.05.2016
Сообщений: 1,793

А да, всё правильно.

Хорошая программа; самое главное рабочая. Тогда пояснения:

1) Пусть «temp1= 65432».
Когда ты делишь «firstDigit=temp1/10000;», то «firstDigit» должен равняться по идеи «6,5432» (но это число вещественное — тип «float»), а у тебя «int firstDigit». В результате происходит конфликт типов и компилятор (не долго думая) просто делает «неявное преобразование типа float в int», — в результате отбрасывается дробная часть и «firstDigit=6».

p.s.: вообще то, есть в Си возможность и «явного преобразования типов»:

. =int (float) .
2) Напомню «temp1= 65432»; а конструкция:
«temp2=temp1%10000;»

помещает в «temp2» ОСТАТОК ОТ ДЕЛЕНИЯ 65432 на 10000, т.е. «temp2= 5432» (ну вот смотри: делим 65432 на 10000= 6*10000+5432. Число «5432» называется «остаток от деления числа 65432 на 10000»).

Всё, принципы ты понял (в программе работают только эти два принципа), — теперь пробегись по коду (это надо для усвоения материала) и напиши на бумажке что происходит с переменными на каждом шаге (возьми для примера число «number= 65432»).

Последний раз редактировалось ura_111; 01.02.2017 в 16:16 .

Источник: www.programmersforum.ru

Русские Блоги

Введите пятизначное положительное целое число и используйте массив, чтобы определить, является ли он палиндромом (например, 12321 — палиндром)

import java.util.*; public class first < public static void main(String[] args) < int [] nums = new int [5]; // Объявление массива Scanner input=new Scanner(System.in); System.out.println («Пожалуйста, введите пятизначное положительное целое число:»); int num = input.nextInt (); // Получаем номер входа и присваиваем его массиву int mark = num; // отметка int marks=0; if (num>= 9999 num = 0; i -) // Оцениваем, палиндром ли это // Первая цифра == последняя цифра // Второе число == предпоследняя цифра for(int i=0;i > System.out.println («Это число — число палиндрома, это число:» + знак); >else < System.out.println («ошибка ввода»); >> >

Интеллектуальная рекомендация

Чтение «CSS World» Xiaoji 4.1.1 Глава 4.1.1

Предисловие Эта глава имеет смысл. По сравнению с первыми тремя главами, она немного длинная. Я все еще хотел написать ее, но я писал слишком долго за раз, но большинство из них были наклейками и кодо.

Fuchsia Learn-Banjo-tutorial.md (ниже)

Стиль языка C ++ C ++ немного сложнее, чем версия языка C. Давайте взглянем. Переводчик банджо генерирует три файла 1. Первый файл был введен в языковой версии C. Два других файла находятся в каталоге.

Ответ широковещательной передачи ARP

Ранее считалось, что запрос является широковещательным, а ответ одноадресным. Но когда я сегодня работал над проектом по синтаксическому анализу пакетов данных arp, начальник (ps: богоподобное существ.

Используйте express4 и socket.io для создания сервера

Сначала установите express4, обратитесь к http://www.expressjs.com.cn/starter/generator.html Затем создайте экспресс-проект Это создает проект экспресс-фоновой службы на основе шаблона ejs. Следующая .

Общие команды Ansible (специальные команды)

Ansible предоставляет два способа выполнения задач: один — это специальные команды, а другой — написание сборников пьес Ansible. Первый может решать некоторые простые задачи, а второй — более сложные .

Источник: russianblogs.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru