[伯俊]1110号:プラスサイクル



質問する


0以上99以下の整数を指定すると、次の演算が可能になります.与えられた数字が10より小さい場合は、前に0を加えて2桁にし、各桁の数字を加える.そして,与えられた数字の右端桁を先に求めたプロトコルの右端桁に加算することで,新しい数字を生成することができる.次の例を見てみましょう.
26から始まります.2+6=8.新しい数字は68です.6+8=14.新数は84です.8+4=12.新しい数字は42です.4+2=6.新しい数は26です.
上の例は4回で元の数に戻ることができます.したがって、26の周期長は4である.
Nが与えられた場合、Nの周期長を求めるプログラムを作成してください.

入力


1行目はNです.Nは0以上、99以下の整数である.

しゅつりょく


1行目にNのサイクル長を出力する.

私の答え

i=int(input()) #변수 i는 값을 입력받기 위한 변수이다.(문제의 N)
c=0 #변수 c는 사이클 길이를 출력하기 위한 변수이다.
num=i #num=i는 입력 받은 값을 저장하는 변수
while True:
    sumNum=(num//10)+(num%10)   #각 자리 숫자 더함
    conNum=((num%10)*10)+(sumNum%10) #입력 받은 숫자의 오른쪽+합의 오른쪽 값
    c+=1
    if conNum==i:   #새롭게 생성된 숫자와 입력 받은 숫자의 값이 동일하면 멈춤
        break
    num=conNum  #while문 안 끝나면 다시 계산할 수 있도록 새롭게 생성된 숫자 저장
print(c)
 

解説


問題の例を見てください.

このような過程で新しい数字が生まれることがわかる.
したがって、これらの処理は、入力された数字26が現れるまで繰り返される.
コードに入力された数字の各桁数を求める部分は以下の通りです.
sumNum=(num//10)+(num%10)
このセクションは、上記の例で表示されます.
(num/10)は26/10(シェア)2
(num%10)26%10(残り)で6をエクスポートし、各数値を加算し、8の値をsumnumに格納します.
次に、入力した数字1の桁数と、各桁数の1の桁数とを加算して新しい数字を生成する部分を示します.
conNum=((num%10)*10)+(sumNum%10)
(num%10)*10 26の残りの6に10を乗じて60を生成します.
(sumnum%10)各位置の1の桁数を求める.つまり8です.
この値を加算すると、68は新しい数値を生成します.
最初に入力した数字と同じ26が出るまで、上記の手順を繰り返します.
if conNum==i:
        break
入力した数字と同じ数字が表示された場合、while文が中断されます.
num=conNum
while文が終了しない場合はnum変数に新しい数値を代入して再計算します.