🐍Python/Python_알고리즘

[알고리즘] 49. Modified Kaprekar Numbers

728x90
반응형

modified Kaprekar number is a positive whole number with a special property. If you square it, then split the number into two integers and sum those integers, you have the same value you started with.

Consider a positive whole number  with  digits. We square  to arrive at a number that is either  digits long or  digits long. Split the string representation of the square into two parts,  and . The right hand part,  must be  digits long. The left is the remaining substring. Convert those two substrings back to integers, add them and see if you get .

For example, if  then . We split that into two strings and convert them back to integers  and . We test , so this is not a modified Kaprekar number. If , still , and . This gives us , the original .

Note: r may have leading zeros.

Here's an explanation from Wikipedia about the ORIGINAL Kaprekar Number (spot the difference!):

In mathematics, a Kaprekar number for a given base is a non-negative integer, the representation of whose square in that base can be split into two parts that add up to the original number again. For instance, 45 is a Kaprekar number, because 45² = 2025 and 20+25 = 45.

Given two positive integers  and  where  is lower than , write a program to print the modified Kaprekar numbers in the range between  and , inclusive.

Function Description

Complete the kaprekarNumbers function in the editor below. It should print the list of modified Kaprekar numbers in ascending order.

kaprekarNumbers has the following parameter(s):

  • p: an integer
  • q: an integer

Input Format

The first line contains the lower integer limit .
The second line contains the upper integer limit .

Note: Your range should be inclusive of the limits.

Constraints

Output Format

Output each modified Kaprekar number in the given range, space-separated on a single line. If no modified Kaprekar numbers exist in the given range, print INVALID RANGE.

Sample Input

1
100

Sample Output

1 9 45 55 99

Explanation

, and  are the Kaprekar Numbers in the given range


답:


#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the kaprekarNumbers function below.
if __name__ == '__main__':
p = int(input())

q = int(input())
pos = []
for num in range(p,q+1):
square = str(num**2)
n = len(str(num))
left = ''.join(square[:-n])
right = ''.join(square[-n:])
if not left:
left = '0'
if (int(left) + int(right)) == num:
pos.append(num)
if pos: # 0이면 invalid 출력 리스트에 뭐라도 있으면 pos꺼 출력
print(' '.join([str(k) for k in pos]))
else:
print("INVALID RANGE")



제곱한 숫자의 갯수를 반으로 나누어서 그 둘을 더 했을 때 제곱하기 전 자기 숫자가 나와야 함!


처음에는 left에 할당이 안되기에, 방지하기 위해 아무것도 없을 때 0을 넣어줌

728x90
반응형