Disarium Number คืออะไร?
จำนวนที่ ผลรวมของแต่ละหลัก ยกกำลังด้วยตำแหน่งของมัน เท่ากับตัวเลขเอง
ตัวอย่าง: 518 = 5¹ + 1² + 8³ = 5 + 1 + 512 = 518 → เป็น Disarium
อัลกอริธึม
- นับจำนวนหลักของ n
- แยกหลักจากขวาไปซ้าย ยกกำลังด้วยตำแหน่ง (นับจากซ้าย)
- รวมค่าแล้วเปรียบเทียบกับ n
โปรแกรมตัวอย่าง
#include <iostream>
#include <cmath>
using namespace std;
int countDigits(int n) {
int cnt = 0;
while (n) { n /= 10; cnt++; }
return cnt;
}
bool isDisarium(int n) {
int original = n;
int digits = countDigits(n);
int sum = 0;
while (n > 0) {
int d = n % 10;
sum += pow(d, digits--);
n /= 10;
}
return sum == original;
}
int main() {
int n = 518;
cout << n << (isDisarium(n) ? " is a Disarium Number" : " is not a Disarium Number");
return 0;
}
ผลลัพธ์
518 is a Disarium Number