Я пытаюсь сделать немного кода, который будет проверять, является ли число числом Капрекара. Я огляделся, чтобы посмотреть, не поднимал ли кто-нибудь эту тему, но не нашел достаточной информации, поэтому приношу вам свои горести.
Что такое число Капрекара:
Для числа Капрекара k с n цифрами, если вы возведете его в квадрат и добавите правые n цифр к левым n или n-1 цифрам, результирующая сумма будет равна k. 9 является примером этого, поскольку 9^2=81, а 8+1=9.
Вот что я собрал прямо сейчас:
def kaprekar?(k)
if k**2.to_s.length % 2 == 0
split_k_array = k**2.to_s.split(//)
half_k_array_length = split_k_array.length / 2
i = half_k_array_length
x1 = 0
while i > 0
x1 = x1 + (10**i * split_k_array[i-1])
i = i - 1
end
x2 = 0
i = split_k_array.length
while i > half_k_array_length
x2 = x2 + (10**(i-half_k_array_length))
i = i - 1
end
if k == x1 + x2
return true
else
return false
end
else
puts "Let's figure out what wrong with the other code first :("
return "Meh"
end
end
if kaprekar(500500)
puts "500500 is True :)"
else
puts "500500 is False :("
end
if kaprekar(9)
puts "9 is True :)"
else
puts "9 is False :("
end
если kaprekar(22) ставит "22 верно", иначе ставит "22 неверно" end
Этот код не возвращает никаких ошибок, но пока квадрат k представляет собой четное число цифр, независимо от того, является ли предоставленное число числом Капрекара или нет, метод возвращает значение True. На самом деле, даже если я изменю тестовую часть на:
if x1 + x2 = k
return false
else
return false
end
... Я все еще получаю True вернулся ко мне! Как это возможно?
Любая помощь будет оценена по достоинству!
РЕДАКТИРОВАТЬ 1: я исправил назначения правды, чтобы читать "==" вместо "=", и я изменил показатели степени "^" на "**". Тем не менее, мне по-прежнему возвращается «Истина» в обоих случаях, описанных выше. :(
РЕДАКТИРОВАТЬ 2: Кажется, я пропустил 2 "^"! Починил это!
РЕДАКТИРОВАТЬ 3: добавлен код для проверки метода Kaprekar при каждом запуске кода. Исправлена ошибка в строке (Кажется, я пытался разделить длину строки, а не саму строку. Боже!). В любом случае теперь я получаю сообщение об ошибке: "kaprekarTest.rb:37: неопределенный метод `kaprekar' для main:Object (NoMethodError)" Теперь я только что определил метод kaprekar. почему я должен получить сообщение о том, что такого метода нет?
kaprekar
, но у вас нет метода с таким именем. То, что я вижу, это метод под названиемkaprekar?
, а это совсем другое животное. Вам нужно написать свой код, пока у вас не будет чего-то, что вы в основном будете рады показать. До сих пор все, что мы обсуждали, не имело ничего общего с вашими числовыми тестами, а имело отношение к Ruby. Также исправьте свой блок кода, у вас есть строка прямо под выделением, которое, я думаю, вам действительно нужно в этом блоке кода. - person vgoff   schedule 15.10.2013