[CPE一星49題] UVA10929 - You can say 11 題目解析與實作
編輯製作: 蔡豐聲、李心潔
單位: 中國醫藥大學 醫療資訊學系 程式俱樂部
YT: https://youtu.be/zkRkgCWFxL0
## 題目資訊
- 題目名稱: You can say 11
- 編號: CPE10460, UVA10929
- 相關平台: Zero Judge, Online Judge
## 題目解析
本題要求判斷一個給定的長整數是否為 11 的倍數 。由於輸入的數字可能非常大(長度可達 1000 位數),直接使用整數型態進行除法運算可能會導致溢位。
## 輸入說明
- 包含多組測試資料,每組資料為一個正整數(最高可達 1000 位數)。
- 當輸入為 0 時,代表程式結束 。
## 輸出說明
- 若該數是 11 的倍數,輸出:
[數字] is a multiple of 11.
- 若該數不是 11 的倍數,輸出:[數字] is not a multiple of 11.
## 範例測試
- 輸入:
308
2937
112233 is a multiple of 11.
308 is a multiple of 11.
- 輸出:
308 is a multiple of 11.
2937 is a multiple of 11.
## 解題思路
- 倍數判定法:一個數是否為 11 的倍數,其判別法為「奇數位數之和」與「偶數位數之和」的差值若為 11 的倍數(包含 0),則該數為 11 的倍數 。
- 大數處理:由於數字極長,應以字串 (String) 型態讀入 。
- 實作步驟:
- 讀入字串後,遍歷每個字元並將其轉換回數字 。
- 分別加總奇數位置與偶數位置的數值 。
- 計算兩者差值的絕對值,並判斷是否能被 11 整除 。
## 實作程式碼 (Python)
while True:
a = input()
if a == '0':
break
odd = 0
even = 0
for i in range(len(a)):
if i % 2 == 1:
odd += int(a[i])
else:
even += int(a[i])
if (odd - even) % 11 == 0:
print(a, "is a multiple of 11.")
else:
print(a, "is not a multiple of 11.")---
本著作採用創用 CC 姓名標示-非商業性-禁止改作 3.0 台灣 授權條款授權。
本部落格的免責聲明。
本著作採用創用 CC 姓名標示-非商業性-禁止改作 3.0 台灣 授權條款授權。
本部落格的免責聲明。
程式俱樂部YT頻道 https://www.youtube.com/@tsai-cai
