逆数


作成日:2022年1月7日午後6:04

インプリメンテーションコード

# 뒤집은 소수
import sys
sys.stdin = open("input.txt", "rt")
n = int(input())
numList = list(map(int, input().split()))

def reverse(x):
    isFirst = True
    result = ""
    reverseNumList = list(str(x))
    reverseNumList.reverse()
    for i in reverseNumList:
        if isFirst and i == '0':
            pass
        elif isFirst and i != '0':
            result += i
            isFirst = False
        else:
            result += i
    return int(result)

def isPrime(x):
    if x == 1:
        return False
    if x == 2:
        return True
    m = int(x ** 0.5)
    for i in range(2, m+1):
        if x % i == 0:
            return False
    return True

for i in numList:
    reverseNum = reverse(i)
    if isPrime(reverseNum):
        print(reverseNum, end=' ')

模範解答

import sys
sys.stdin=open("input.txt", "r")
n=int(input())
a=list(map(int, input().split()))
def reverse(x):
    res=0
    while x>0:
        t=x%10
        res=res*10+t
        x=x//10
    return res

def isPrime(x):
    if x==1:
        return False
    for i in range(2, x):
        if x%i==0:
            return False
    return True

for x in a:
    tmp=reverse(x)
    if isPrime(tmp):
        print(tmp, end=' ')

差異

  • で入力した数値を反転する関数reverse(x)では、整数xをstringに変換し、リストに列挙し、Pythonで提供されるアレイ関数reverse()を使用して数値を反転します.
  • 7300などの数字が逆さまになると0073となり、正しい整数型にはなりません.(正確には、73のように、前に0があるべきではない)この問題を解決するために、最初の0ではない数字が現れるまで、結果値(反転数)に追加しないようにリストを繰り返します.
  • 模範解答では,以前の整数桁数の和を求めた場合と同様に,与えられた数を10で割って余りを求め,それを結果値に加算して論理を構成している.このように実施すれば、7300などの首都0073は存在しない.
  • why?
  • res=res*10+tではresとtが0であるため、末尾の0は結果値に影響しない.