บทนำ
ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมหา Digital Root คือผลรวมของหลักของจำนวน ทำซ้ำจนได้เลข 1 หลัก (0-9)
ตัวอย่าง
Input: 4543
Output: 7
(4+5+4+3=16 → 1+6=7)
วิธีที่ 1: วนลูปคำนวณโดยตรง
#include <bits/stdc++.h>
using namespace std;
void findTheSingleDigit(int n) {
int sum = 0;
while(n > 0 || sum > 9) {
if(n == 0) {
n = sum;
sum = 0;
}
sum += n % 10;
n /= 10;
}
cout << sum << endl;
}
int main() {
int n = 4543;
findTheSingleDigit(n);
return 0;
}
วิธีที่ 2: สูตรคณิตศาสตร์ (O(1))
Digital Root มีสูตรง่ายๆ:
- ถ้า n = 0 → ผลลัพธ์ = 0
- ถ้า n หาร 9 ลงตัว → ผลลัพธ์ = 9
- อื่นๆ → ผลลัพธ์ = n % 9
#include <bits/stdc++.h>
using namespace std;
void findTheSingleDigit(int n) {
if (n == 0) {
cout << 0;
} else if (n % 9 == 0) {
cout << 9 << endl;
} else {
cout << n % 9 << endl;
}
}
int main() {
int n = 4543;
findTheSingleDigit(n); // 4543 % 9 = 7
return 0;
}
ผลลัพธ์
7
สรุป
วิธีที่ 2 ใช้สูตรคณิตศาสตร์ (Digital Root formula) เร็วที่สุด O(1) เหมาะสำหรับทุกขนาดของจำนวน หากมีคำถาม สามารถถามได้ในส่วนความคิดเห็นครับ