บทนำ
Deserium Number (หรือที่รู้จักกันดีกว่าในชื่อ Disarium Number) คือเลขที่ผลรวมของแต่ละหลัก ยกกำลังด้วยลำดับหลัก (นับจากซ้าย) เท่ากับตัวเลขเดิม
ตัวอย่าง
135: 1¹ + 3² + 5³ = 1 + 9 + 125 = 135 → เป็น Deserium 89: 8¹ + 9² = 8 + 81 = 89 → เป็น Deserium
ขั้นตอนการแก้ปัญหา
- นับจำนวนหลักของตัวเลข
- วนลูปจากหลักหน้าสุด (ต้องเก็บหลักไว้ก่อน หรือวนจากหลังแล้วยกกำลังย้อนกลับ)
- รวม pow(digit, position)
- เปรียบเทียบกับตัวเลขเดิม
ตัวอย่างโค้ด
#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int getDigitsCount(int n) {
int digitsCount = 0;
do {
digitsCount++;
n = n / 10;
} while (n != 0);
return digitsCount;
}
bool isDeseriumNumber(int n) {
int originalNumber = n;
int digitsCount = getDigitsCount(n);
int sum = 0;
while (n != 0) {
int digit = n % 10;
sum += pow(digit, digitsCount);
digitsCount--;
n = n / 10;
}
return sum == originalNumber;
}
int main() {
int n = 135;
if (isDeseriumNumber(n)) {
cout << "Yes";
} else {
cout << "No";
}
cout << endl;
return 0;
}
ผลลัพธ์
Yes
Desarion Numbers ที่รู้จัก
1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, 1306, 1676, 2427, ...
สรุป
Deserium Number เป็นลำดับน่าสนใจใน Number Theory โค้ดนี้ใช้ pow() จาก math.h ควรระวังปัญหาความแม่นยำ floating point สำหรับเลขใหญ่ ควรเขียน integer power เอง