總網頁瀏覽量

2018年4月20日 星期五

第二題:自戀數

問題描述
一個d 位數整數 𝑁 = n1n2n3...nd,ni ∈ {1,2,3,4,5,6,7,8,9,0}被稱為自戀數 (narcissistic
number) 若𝑁 = n1^d+n2^d+....+nd^d
例如3 位數整數153 是自戀數因為153=13+53+33,
而4 位數整數1321 不是自戀數因為14+34+24+14=99 非1321。
非十進位制數字也會有自戀數,例如3 進位制數字(122)3=17 且13+23+23=17,或5 進位
制數字(3134)5=419 且34+14+34+44=419。
請寫一個程式判斷一整數是否為自戀數。
輸入格式
第一列有兩個非負整數 𝑏 與 𝑁,代表 𝑁 為 𝑏 進位制整數。
輸出格式
若輸出之整數為自戀數,輸出YES,若否則輸出 NO。
評分說明
本題共有二個子題,每一子題可有多筆測試資料:
第一子題的測試資料 𝑏 = 10,𝑁 最大為 8 位數整數,全部解出可獲 83 分;
第二子題的測試資料 2 ≤ 𝑏 ≤ 10,𝑁 最大為 8 位數整數,全部解出可獲 17 分。
輸入範例1
10 153
輸出範例1
YES
輸入範例2
10 1321
輸出範例2
NO
輸入範例3
3 122
輸出範例3
YES
輸入範例4
5 3134
輸出範例4
YES

Python Code:
import math as lp
data=input() 
li=data.split() #輸入的字串,將之分開
n,x=[],[]
n=[int(x) for x in li] #將輸入的字串改成整數
b=n[0]
N=n[1] # N為b進位制整數
d=lp.floor(lp.log10(N))+1 # 取出N的位數 
for i in range(d): #取出N的各位數字
    ls=N%10
    x.append(ls)
    N//=10
s=0 # 計算每個數字的次方和
for j in range(d):
    s+=x[j]**d
ss=0 # 計算b進位制和
for k in range(d):
    ss+=x[k]*(b**(k))
if s==ss:
    print('YES')
else:

    print('NO')

沒有留言:

張貼留言