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, в 22:10
Поделиться
Вы хотите проверить, является ли число палиндромом, или действительно искать палиндромные числа в пределах гораздо большего числа?
Разница состоит в нескольких строках кода (если таковые) и во многих других.
user10789 23 нояб. 2009, в 20:55
Просто проверьте, является ли данное число палиндромом. Не искать их в диапазоне чисел, например: от 1000 до 9000.
Fábio Antunes 23 нояб. 2009, в 21:08
Jed Smith 23 нояб. 2009, в 21:11
Ребята, вы удивительны, благодаря всем вашим усилиям я сделал это.
Fábio Antunes 23 нояб. 2009, в 21:30
Если кому-то интересно. Код C # загружает числа из файла XML и проверяет, является ли каждое число палиндромным или нет.
Fábio Antunes 23 нояб. 2009, в 21:52
Возможный дубликат Как проверить, является ли число палиндромом?
TheLethalCoder 15 сен. 2015, в 14:47
Показать ещё 4 комментария
Математические операции для поиска палиндрома
Поделиться:
12 ответов
Лучший ответ
Я проверяю палиндромы, преобразовывая целое число в строку, затем меняя строку, а затем сравнивая равенство. Это будет лучший подход для вас, поскольку вы только начинаете.
Поскольку вы работаете на С#, и это домашняя работа, я буду использовать очень неясный Python, который вам не поможет:
def is_palindrome(i): s = str(i) return s[::-1] == s
Преобразуйте это в С#, и вы получите ответ.
Jed Smith 23 нояб. 2009, в 21:37
Поделиться
«Поскольку вы работаете в C #, я буду использовать очень неясный Python, который вам не поможет:« Сделал мой день.
Mercurybullet 23 нояб. 2009, в 20:49
умный — вероятно, немного излишним, но простой для понимания и программирования. хорошее решение
echo 23 нояб. 2009, в 20:50
В ожидании ответа Brainfuck — это будет еще более неясным 🙂
schnaader 23 нояб. 2009, в 20:50
Overkill? Если это излишне, то что такое недоумение?
mqp 23 нояб. 2009, в 20:55
Jed Smith 23 нояб. 2009, в 20:57
О, я понимаю, если вы имели в виду, что это не очень эффективно. Я просто неверно истолковал «излишество».
mqp 23 нояб. 2009, в 21:11
Jed Smith 23 нояб. 2009, в 21:12
echo 24 нояб. 2009, в 06:41
Jed Smith 24 нояб. 2009, в 15:53
Показать ещё 7 комментариев
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 23 нояб. 2009, в 20:50
Поделиться
+1 за простой ответ, который не выдает код.
JMarsch 23 нояб. 2009, в 21:24
Есть много способов. Вероятно, самым простым является наличие 2 индексов, я в начале и j в конце номера. Вы проверяете, есть ли [i] == a [j].
Если это так, приращение я и декремент j. Вы останавливаетесь, когда i > j. Когда вы зацикливаете, если вы когда-нибудь достигнете точки, где [i]!= A [j], то это не палиндром.
dcp 23 нояб. 2009, в 21:40
Поделиться
Нахождение суммы цифр вводимого с клавиатуры натурального трехзначного числа на языке Паскаль
Вы можете сохранить раунд в 50% случаев, проверив, если i >= j вместо i > j , поскольку, если i == j , n[i] == n[j]
Matthew Scharley 23 нояб. 2009, в 21:12
Хорошая точка зрения :). Я думаю, что это все равно заканчивается O (N / 2) в любом случае.
dcp 23 нояб.
2009, в 21:31
Принятый ответ — это еще один способ проверить:
user152759 23 нояб. 2009, в 21:19
Поделиться
bool IsPalindrome(string str)
Raz Megrelidze 12 июль 2014, в 18:58
Поделиться
Приятное рекурсивное прикосновение!
Manish Jain 19 авг. 2014, в 05:53
Этот не игнорирует дело
DoIt 22 сен. 2016, в 14:45
Вот какой рабочий код.
Первая функция проверяет, является ли число palidromic, преобразовывая его в строку, а затем IEnumerable и тестируя, если он равен обратному. Этого достаточно, чтобы ответить на ваш вопрос. Основная функция просто выполняет итерации по целым числам, проверяя их по одному.
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; > > >
Источник: overcoder.net
Первые числа-палиндромы (Си)
Задача: Найти первые m более чем 2-разрядных чисел-палиндромов, то есть чисел, десятичная запись которых читается одинаково в прямом и обратном направлениях, например: 353, 234432. Решение: Чтобы сделать это надо получить крайнюю правую и крайнюю левую цифры, потом следующую пару и так далее. Однако, если получить правую цифру несложно, то чтобы получить левую — надо перебрать все цифры справа от нее. Наиболее очевидное решение — поместить все найденные цифры числа в массив, а затем проверить его на палиндром. Для преобразования числа в массив цифр используется написанная ранее функция number_to_digits . Для проверки того, является ли массив палиндромом, перебирается его левая половина элементов ( i < size/2 ) и для каждого выполняется сравнение с соответствующим элементом из правой половины. Если найдено несоответствие — сразу возвращается ноль. если же для всех элементов массива условие выполнится — программа перейдет к коду после цикла, который возвращает единицу:
int is_palindrome_arr(int size, int* arr) < for (int i = 0; i < size/2; ++i) < if (arr[i] != arr[size-i-1]) return 0; >return 1; >
Имея эти функции несложно проверить является ли число палиндромом, для этого число преобразуется в массив цифр, для массива проверяется свойство палиндромов — результат сохраняется в переменной ok . Результат нельзя вернуть сразу так как надо не забыть освободить память, которая была выделена под цифры — для этого вызывается free , а затем уже возвращается результат. В функции main остается лишь перебрать m чисел для которых выполнится условие. Числа перебираются от 100, так как по условию нужны числа из более чем двух цифр. Исходный код целиком:
#include #include // дополнить код функцией digitsCount void number_to_digits(int value, int *digits_count, int** digits) < *digits_count = digitsCount(value); *digits = malloc(sizeof(int)*(*digits_count)); int i = 1; while (value != 0) < (*digits)[(*digits_count) — i] = value % 10; value = value / 10; i++; >> int is_palindrome_arr(int size, int* arr) < for (int i = 0; i < size/2; ++i) < if (arr[i] != arr[size-i-1]) return 0; >return 1; > int is_palindrome(int value) < int digits_count; int* digits; int ok; number_to_digits(value, digits); ok = is_palindrome_arr(digits_count, digits); free(digits); return ok; >int main() < int m; printf(«m: «); scanf(«%d», int count = 0; for (int i = 100; count < m; ++i) < if (is_palindrome(i) == 1) < printf(«%d «, i); count++; >> return 0; >
Просмотр 0 веток ответов
- Для ответа в этой теме необходимо авторизоваться.
Источник: pro-prof.com
Программирование на C, C++, C#
//a) int max=0; do < const int q=6; int A[q][q]; srand(time(NULL)); for(int i=0;i
setlocale(LC_ALL, «Russian»); int a, b; cout << «Введите первое число:»; cin >> a; cout << «.
void init(int *a, int size); void out(int *a, int size); void out_c(int *a, int size); void main() < setlocale(LC_ALL, «Russian.
int a, b; setlocale(0, «rus»); cout << «Введите начало диапазона:»; cin >> a; cout << «Введи.
unsigned int time=86399; ////cout << «Enter time:»; ////cin >> time; //int day = time / 24 / 3600; //.
int s, hours, min; cout << «Enter distance (km):»; cin >> s; cout << «Enter hours and min: int res(); void main() < char brosok; do < setlocale(LC_ALL, «Russian»); srand(time(NULL)); co.
int a, b; setlocale(0, «rus»); cout << «Введите начало диапазона:»; cin >> a; cout << «Введи.
int begin_hours, begin_min, begin_sec; int end_hours, end_min, end_sec; cout
double gb, bit; cout << «Enter the size of the movie(Gb):»; cin >> gb; cout << «Enter speed co.
Архив блога
- ▼2016 (145)
- ►апреля (48)
- ▼февраля (44)
- Определить, является ли введённое число любой разр.
- Написать программу, которая выводят на экран ромб .
- Написать программу, которая выводят на экран ромб .
- Написать программу, которая выводит на экран елочку.
- Тоже самое, но фигура перевернута и пустая внутри.
- Написать программу, которая выводит на экран все «.
- Нарисовать звездочками флаг Великобритании.
- Вывести на экран таблицу умножения от 1 до 9 в вид.
- Написать программу, которая выводят на экран флаг .
- Создать символьный массив (char-массив) из 10 элем.
- Написать программу, которая предлагает пользовател.
- Создать массив из 10 целых случайных чисел в диапа.
- Создать массив из 10 целых случайных чисел в диапа.
- Создать массив из 20 случайных чисел в диапазоне о.
- Создать массив из 20 случайных чисел в диапазоне о.
- Ввести массив из 10 вещественных чисел. Определить.
- Создать массив из 20 случайных чисел. Определить м.
- Создать массив из 20 случайных чисел в диапазоне о.
- Создать массив из 20 целых случайных чисел в диапа.
- Даны 2 массива размерности M и N соответственно. Н.
- Дан массив из 20 чисел. Отсортировать первую и тре.
- Поместить в одномерный массив числа от 1 до 30 (31.
- Вывести одномерный массив по диагонали на экран бу.
- Вывести на экран одномерный массив в виде полого к.
- Отсортируйте по неубыванию методом «пузырька» одно.
- Создать одномерный массив из 50 элементов и заполн.
- Есть два одномерных массива типа int, в третий (др.
- Написать программу, копирующую один массив в друго.
- Написать программу, копирующую последовательно эле.
- Написать программу, копирующую последовательно эле.
- Сделать зеркальное отображение массива.
- Осуществить циклический сдвиг массива на один элем.
- Отсортируйте по невозрастанию методом «вставками» .
- Отсортируйте по возрастанию методом «вставками» о.
- Массив размером 2m + 1, где m – натуральное число.
- Массив размером m, где m – натуральное число, запо.
- Реализовать программу, которая позволит пользовате.
- Создать массив из 10 целых случайных чисел. Измени.
- Даны 2 массива размерности M и N соответственно. Н.
- Создать массив из 10 целых случайных чисел. Поменя.
- Создать два массива A и B из 5 элементов. Создать .
- Написать программу, копирующую один массив в друго.
- Написать программу, копирующую последовательно эле.
- Вывести на экран шахматную доску, используя пробел.
- ►января (53)
- ►2015 (182)
- ►декабря (30)
- ►сентября (13)
- ►июня (13)
- ►мая (23)
- ►апреля (44)
- ►марта (59)
Источник: prog88.blogspot.com