ปานกลาง 0 ข้อที่แก้แล้ว อัตราผ่าน 0%

รากดิจิทัล

บวกตัวเลขแต่ละหลักซ้ำไปเรื่อย ๆ จนเหลือเพียงหลักเดียว

สิ่งที่คุณจะได้เรียนรู้

  • บวกหลักซ้ำจนเหลือหลักเดียว
  • ใช้ลูปด้านในร่วมกับเงื่อนไขหยุดด้านนอก
  • สังเกตทางลัดด้วยมอดุโล 9

โจทย์

นำตัวเลขแต่ละหลักของ n มาบวกกัน หากผลลัพธ์มีมากกว่าหนึ่งหลัก ให้นำตัวเลขแต่ละหลักของผลลัพธ์นั้นมาบวกกันอีก ทำซ้ำจนกว่าจะเหลือเพียงตัวเลขหลักเดียว

ให้เขียนฟังก์ชัน digital_root(n)

อินพุต

n: จำนวนเต็มบวก

เอาต์พุต

คืนค่าตัวเลขหลักเดียวสุดท้าย

เงื่อนไข

1 ≤ n ≤ 10¹⁸

ตัวอย่าง

ตัวอย่างที่ 1
อินพุต:
n = 999

ผลลัพธ์ที่คาดหวัง:
expected = 9
อินพุต:
long long n = 999;

ผลลัพธ์ที่คาดหวัง:
long long expected = 9;
อินพุต:
long n = 999;

ผลลัพธ์ที่คาดหวัง:
long expected = 9;

คำอธิบาย

9 + 9 + 9 = 27, จากนั้น 2 + 7 = 9

ตัวอย่างที่ 2
อินพุต:
n = 38

ผลลัพธ์ที่คาดหวัง:
expected = 2
อินพุต:
long long n = 38;

ผลลัพธ์ที่คาดหวัง:
long long expected = 2;
อินพุต:
long n = 38;

ผลลัพธ์ที่คาดหวัง:
long expected = 2;

คำอธิบาย

3 + 8 = 11, จากนั้น 1 + 1 = 2

แนวทางการแก้

ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ

คำใบ้ 1

บวกเลขหลักซ้ำ ๆ ไปเรื่อย ๆ สุดท้ายจะยุบเหลือเลขหลักเดียว

คำใบ้ 2

จำลองการบวกซ้ำจนกว่าค่าจะน้อยกว่า 10

คำใบ้ 3

ระวังอินพุตที่ใหญ่มาก เพราะงานหลักคือการวนผ่านหลักหลายรอบ

ความซับซ้อนที่คาดหวัง

เวลา O(d log n), หน่วยความจำเพิ่ม O(1)

เรียนรู้จากคนอื่น

แนวทางจากชุมชน

ยังไม่มีวิธีทำที่เผยแพร่ ลองแก้โจทย์นี้เพื่อแชร์วิธีแรก