[CPE一星49題] UVA10929 - You can say 11 題目解析與實作


編輯製作:
 蔡豐聲、李心潔

單位: 中國醫藥大學 醫療資訊學系 程式俱樂部 

 YT: https://youtu.be/zkRkgCWFxL0

## 題目資訊

  • 題目名稱: You can say 11
  • 編號: CPE10460, UVA10929

## 題目解析

本題要求判斷一個給定的長整數是否為 11 的倍數 。由於輸入的數字可能非常大(長度可達 1000 位數),直接使用整數型態進行除法運算可能會導致溢位。

## 輸入說明

  • 包含多組測試資料,每組資料為一個正整數(最高可達 1000 位數)。
  • 當輸入為 0 時,代表程式結束 。

## 輸出說明

  • 若該數是 11 的倍數,輸出:[數字] is a multiple of 11. 

  • 若該數不是 11 的倍數,輸出:[數字] is not a multiple of 11.

## 範例測試

  • 輸入:                
                  112233   
                  308   
                  2937  
  • 輸出:                 
                  112233 is a multiple of 11.  
                  308 is a multiple of 11.  
                  2937 is a multiple of 11.  

## 解題思路

  • 倍數判定法:一個數是否為 11 的倍數,其判別法為「奇數位數之和」與「偶數位數之和」的差值若為 11 的倍數(包含 0),則該數為 11 的倍數

  • 大數處理:由於數字極長,應以字串 (String) 型態讀入 。

  • 實作步驟:
  1. 讀入字串後,遍歷每個字元並將其轉換回數字 。
  2. 分別加總奇數位置與偶數位置的數值 。
  3. 計算兩者差值的絕對值,並判斷是否能被 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.")
程式俱樂部YT頻道 https://www.youtube.com/@tsai-cai