Напишіть функцію (або еквівалентну підпрограму), щоб прийняти єдиний цілий аргументований аргумент і повернути (аналогічно набране) значення, знайдене шляхом зміни порядок базових 10 цифр аргументу.
Для прикладу наведено 76543 повернення 34567
Напишіть функцію (або еквівалентну підпрограму), щоб прийняти єдиний цілий аргументований аргумент і повернути (аналогічно набране) значення, знайдене шляхом зміни порядок базових 10 цифр аргументу.
Для прикладу наведено 76543 повернення 34567
Відповіді:
‮n
замініть n
своїм номером
Your search -
- не відповідав жодним документам.
data:text/html,&%238238;egnahcxEkcatS olleH
Пітон
int(str(76543)[::-1])
Редагувати:
Коротше рішення, як запропонував @gnibbler:
int(`76543`[::-1])
або, якщо вище незрозуміло:
x=76543
int(`x`[::-1])
s[::-1]
набагато швидше, ніж''.join(reversed(s))
Універсальний (мовний агностик / незалежний )
Якщо ви хочете використовувати лише числа (уникайте перетворення числа в рядок) і не хочете використовувати певну бібліотеку (щоб бути універсальною для будь-якої мови):
x = 76543 # or whatever is your number
y = 0
while x > 0:
y *= 10
y += ( x %10 )
x /= 10 # int division
Це пітон, але це можна зробити будь-якою мовою, тому що це просто математичний метод.
mod
з %
, вона діє на Python;)
y=y*10+x%10
....
".|.":y
Де у - ваша цінність.
|.&.":
"зворотний перебіг", що в значній мірі є буквальним перекладом завдання.
Повна програма для запуску:
N.@
Де N
твій номер. Правила говорять "прийняти єдиний цілий аргументований аргумент"; У Befunge ви можете ввести лише цілі числа від 0 до 9.
Натхненний відповіддю Кирила Кірова вище. Мені цікаво про математичні властивості перевертання числа, тому я вирішив трохи дослідити.
Виявляється, якщо ви побудуєте різницю n - rev(n)
для натуральних чисел n
у якійсь базі r
, ви отримаєте такі візерунки ( (n - rev(n)) / (r - 1)
бо r=10
, загорнутий у r
стовпці, червоним позначає від’ємне число):
Ця послідовність може бути сформована як така (псевдокод):
for i=1 to r:
output 0
for m=0, 1, …
for k=1 to (r-1):
for d=1 to r^m:
for i=0 to (r-1):
output (r-1) * (r+1)^m * (k - i)
Якщо ви зберігаєте ці значення у списку / масиві, тоді n - arr[n]
ви отримаєте зворотну форму n
. Тепер, щоб "математично гольфувати" це, ми в ідеалі хотіли б виразу закритої форми, який дає нам n: -ве значення в послідовності, щоб ми могли мати вираз із закритою формою для вирішення всієї задачі. На жаль, мені не вдалося знайти такого виразу ... але схоже, що це повинно бути можливим. :(
Так, так, не стільки кодовий гольф, скільки математична цікавість, але якщо є вираз із закритою формою вищезазначеної послідовності, це може бути корисним у правильних поданнях про гольф PL.
f=read.reverse.show.(+0)
f=read.reverse.show.(+0)
?
(+0)
: Легіт чоловік! Хоча технічно вам це зовсім не потрібно .(+0)
, як це f
було б більш поліморфно, ніж те, що вимагає проблема (дозволено повернути вихід "аналогічним чином"). Я б поголив ці 5 символів.
:se ri<CR>C<C-R>"
x = 13456
x.to_s.reverse
.to_s.reverse.to_i
відповідати специфікації.
Можна перетворити число в рядок, потім обернути рядок і потім перетворити цей рядок в число. Ця функція, ймовірно, доступна всіма мовами. Якщо ви шукаєте більш математичний метод, це може допомогти:
int n = 76543;
int r = 0;
while (n > 0) {
r *= 10;
r += n % 10;
n /= 10;
}
1111111119
`-1%~
Це бере аргумент на стек і залишає результат у стеці. Я використовую параметр "підпрограма" в специфікації: якщо ви наполягаєте на функції, це на чотири символи більше, залишаючи її в стеці:
{`-1%~}:r
`-1%~
а не `-1$~
(і я взяв на себе сміливість редагувати вашу відповідь, щоб сказати так).
У сценарії оболонок:
echo "your number"|rev
Сподіваюся, це було корисно :)
rev<<<yournumber
, наприклад rev<<<132
(для Баша / Zsh, а нема на POSIX , хоча)
rev
достатньо, питання не говорить, що це має бути функцією. Можна порівняти rev
із вбудованою функцією, хоча вона не одна.
Ніби пізно, але
⍎⌽⍞
Якщо ви наполягаєте на функції
⍎∘⌽∘⍕
IntegerReverse
Це не конкурує, тому що ця функція була додана лише у випуску 10.3 минулого тижня, але для повноти я подумав, що я би додав єдиний (коли я думаю?) Вбудований для цього завдання.
Ви можете зробити наступне на Java. Зауважте, що це перетворюється на String і back і не є математичним рішенням.
public class test {
public static int reverseInt(int i) {
return Integer.valueOf((new StringBuffer(String.valueOf(i))).reverse().toString());
}
public static void main(String[] args) {
int i = 1234;
System.out.println("reverse("+i+") -> " + reverseInt(i));
}
}
43 символи. num як параметр функції:
num.toString().split('').reverse().join('')
(first(list(parse-integer(reverse(write-to-string '4279)))))
отримає вас 9724.
(first(list
? parse-integer
вже повертає номер.
#
+#(.*)(.)/\2#\1
#/
Технічно це не враховується (rs було створено на початку цього року), але я не бачив жодних інших відповідей на основі регулярних виразів, і я вважав, що це акуратно.
#
Вставте символ фунта на початку рядка. Це використовується як маркер.
+#(.*)(.)/\2#\1
Постійно додайте останній символ основного рядка до області перед маркером, поки не залишиться жодних символів.
#/
Видаліть маркер.