Eine modifizierte Kaprekar-Zahl ist eine positive ganze Zahl n mit d Ziffern, so dass, wenn wir das Quadrat in zwei Teile aufteilen – ein rechtes Teil r mit d Ziffern und ein linkes Teil l, das die restlichen d oder d−1 Ziffern enthält, die Summe der Teile gleich der ursprünglichen Zahl ist (d. h. l + r = n).
Alternativ ist eine modifizierte Kaprekar-Zahl eine positive ganze Zahl n mit 2d Ziffern (wenn die Anzahl der Ziffern gerade ist) oder 2d + 1 Ziffern (wenn die Anzahl der Ziffern gerade ist). Die Anzahl der Ziffern ist ungerade), so dass, wenn wir das Quadrat in zwei Teile teilen, ein rechtes Teil r mit d oder d + 1 Ziffern und ein linkes Teil l mit den restlichen d Ziffern, die Summe der beiden Teile gleich ist zum Original Zahl.
Wir müssen Kaprekar-Zahlen innerhalb eines bestimmten Bereichs finden. Also habe ich den folgenden Code geschrieben:
Code: Select all
def checkIsKaprekar( num ):
string_num = str(num**2)
if num == int(string_num[:len(string_num)//2]) + int(string_num[len(string_num)//2:]):
return True
kaprekars = [ str(i) for i in range(int(input()),int(input())) if checkIsKaprekar(i) == True ]
print (' '.join(kaprekars))
Um diese Situation zu vermeiden, habe ich meinen Code wie folgt geändert:
Code: Select all
def checkIsKaprekar( num ):
string_num = str(num**2)
left_string = string_num[:len(string_num)//2]
right_string = string_num[len(string_num)//2:]
left_num = int(left_string) if left_string != '' else 0
right_num = int(right_string) if right_string != '' else 0
if num == left_num + right_num:
return True
kaprekars = [ str(i) for i in range(int(input()),int(input())) if checkIsKaprekar(i) == True ]
print (' '.join(kaprekars))
Link zur Frage: https://www.hackerrank.com/challenges/kaprekar-numbers
Gibt es eine Möglichkeit, den Standardwert 0 anzugeben, wenn die Zeichenfolge '' ist?