###### 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()