ปัญหา
ให้ตัวเลข n ต้องการตรวจสอบว่าผลคูณของหลักที่อยู่ตำแหน่งคู่ (นับจากขวาไปซ้าย ตำแหน่ง 1 คือหลักหน่วย) หารด้วยผลรวมของหลักที่อยู่ตำแหน่งคี่ลงตัวหรือไม่
ตัวอย่าง
n = 59361 → ผลลัพธ์คือ True เนื่องจาก (1×3×5) = 15 และ (6+9) = 15 → 15 หาร 15 ลงตัว
แนวคิดการแก้ปัญหา
- นับจำนวนหลักของ
n(ใช้log10หรือแปลงเป็นสตริง) - กำหนดตัวแปร
total = 0(สำหรับผลรวมตำแหน่งคี่) และprod = 1(สำหรับผลคูณตำแหน่งคู่) - วนลูปดึงหลักทีละหลักจากขวาไปซ้าย:
- ถ้าตำแหน่งปัจจุบันเป็นเลขคู่ → คูณ
prodกับหลักนั้น - ถ้าเป็นเลขคี่ → บวกหลักนั้นเข้า
total - ตัดหลักสุดท้ายออก (
n //= 10) และลดนับตำแหน่ง
- ถ้าตำแหน่งปัจจุบันเป็นเลขคู่ → คูณ
- ตรวจสอบว่า
prod % total == 0ถ้าใช่คืนค่าTrueมิฉะนั้นFalse
โค้ดตัวอย่าง
from math import log10
def solve(n):
digit_count = int(log10(n)) + 1
total = 0
prod = 1
while n > 0:
if digit_count % 2 == 0:
prod *= n % 10
else:
total += n % 10
n //= 10
digit_count -= 1
return prod % total == 0
n = 59361
print(solve(n)) # True
อินพุต / เอาต์พุต
Input: 59361 Output: True