โจทย์
ตัวเลขที่มี k หลัก จะเป็นตัวเลขอาร์มสตรอง หากผลรวมของแต่ละหลักยกกำลัง k เท่ากับตัวเลขนั้น เช่น 153 = 1³ + 5³ + 3³
ให้เขียนฟังก์ชัน is_armstrong(n)
อินพุต
n: จำนวนเต็มไม่ติดลบ
เอาต์พุต
คืนค่า true หาก n เป็นตัวเลขอาร์มสตรอง
เงื่อนไข
0 ≤ n ≤ 10¹⁸
ตัวอย่าง
อินพุต:
n = 153
ผลลัพธ์ที่คาดหวัง:
expected = True
อินพุต:
long long n = 153;
ผลลัพธ์ที่คาดหวัง:
bool expected = true;
อินพุต:
long n = 153;
ผลลัพธ์ที่คาดหวัง:
bool expected = true;
คำอธิบาย
1³ + 5³ + 3³ = 1 + 125 + 27 = 153
อินพุต:
n = 10
ผลลัพธ์ที่คาดหวัง:
expected = False
อินพุต:
long long n = 10;
ผลลัพธ์ที่คาดหวัง:
bool expected = false;
อินพุต:
long n = 10;
ผลลัพธ์ที่คาดหวัง:
bool expected = false;
คำอธิบาย
1² + 0² = 1 ซึ่งไม่เท่ากับ 10
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
นับจำนวนหลักของตัวเลขก่อนค่อยหาผลรวมกำลัง
คำใบ้ 2
เปรียบเทียบเลขเดิมกับผลรวมของแต่ละหลักยกกำลังตามจำนวนหลัก
คำใบ้ 3
จำไว้ว่า 0 เป็นกรณีพิเศษที่มีหนึ่งหลัก
ความซับซ้อนที่คาดหวัง
เวลา O(k), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน