###### tags: `程式設計` # 第四週 ## Reverse And Add :::info 把一個數字反轉並相加的方法很簡單:就是把數字反轉並加上原來的數字。假如這個和不是一個迴文(指這個數字從左到右和從右到左都相同),就一直重複這個程序。舉例說明: <br> ``` 195 開始的數字 591 ---- 786 687 ---- 1473 3741 ---- 5214 4125 ---- 9339 迴文出現了 ``` ::: ```python= def findSol(n) : # do reverse and add until # # num is 'palindrome' # how to 'reverse' 'add'? num = str(int(num) + int(num[::-1])) add = 1 while num != num[::-1] : num = str(int(num) + int(num[::-1])) add += 1 return add, num def main() : # read in how many lines in input n = int(input()) for i in range(n) : # read in each line add, result = findSol(input()) print(add, result) if __name__ == '__main__' : main() ``` - version2 ```python= def reverse(num): #慘,怎麼把 num 裡的每一個digit拿出來? result = 0 # 反轉後的結果 while num != 0: # 當 num 還有 digit 時 # 拿出最後一個 digit, by num % 10 # 把拿出來的 digit 放到 result 後, # by 10 * result + num % 10 result = 10*result + num %10 num = num // 10 return result # type of num is int def findSol(num): #先反轉相加 num = num + reverse(num) addTimes = 1 #當結果不是迴文時 while num != reverse(num): #反轉相加 num = num + reverse(num) #多做一次加法 addTimes = addTimes + 1 #傳回加法次數,和迴文 return addTimes, num def main(): # read in many lines n = int(input()) for i in range(n) : # read in each line # palindrome 迴文 num = int(input()) addTimes, palindrome = findSol(num) print(addTimes, palindrome) if __name__ == '__main__': main() ``` ## Pascal ```python= def genPascal(n) : result = [[1 for j in range(i+1)] for i in range(n)] # except column and diagonal for row in range(2,n) : #row 0 and row 1 都是1,不用處理 for column in range(1,row) : # 最左邊和最右邊的1不能動 result[row][column] = result[row-1][column] + result[row-1][column] return result def myprint(result) : for r in result : for c in r : print('{:2d}'.format(c), end=' ') print() def main() : result = genPascal(int(input())) myprint(result) if __name__ == '__main__' : main()