ได้รับตัวเลข x มี n หลัก ตรวจสอบว่าเป็น Plus Perfect Number (Armstrong Number) หรือไม่
นิยาม: ยกแต่ละหลัก d ยกกำลัง n (dⁿ) แล้วบวกกัน ถ้าผลรวมเท่ากับตัวเลขเดิม → เป็น Plus Perfect Number
ตัวอย่าง
Input: 163 Output: Number is not a perfect_number (1³+6³+3³ = 244 ≠ 163) Input: 371 Output: Number is a perfect_number (3³+7³+1³ = 371)
แนวทาง
- นับจำนวนหลัก (count digits)
- แยกแต่ละหลัก ยกกำลัง n บวกสะสม
- เปรียบเทียบกับตัวเลขเดิม
อัลกอริทึม
Start
power(a,b): result=1 while b>0 result*=a b-- return result
count(n): i=0 while n!=0 i++ n/=10 return i
perfect_number(n):
x = count(n)
m = 0
while n != 0:
rem = n % 10
m += power(rem, x)
n /= 10
return m
main():
n = 1634
if n == perfect_number(n) print "Number is a perfect_number"
else print "Number is not a perfect_number"
Stop
โค้ดตัวอย่าง
#include <stdio.h>
int power(int a, int b) {
int p = 1;
while (b > 0) { p *= a; b--; }
return p;
}
int count(int n) {
int i = 0;
while (n != 0) { i++; n /= 10; }
return i;
}
int perfect_number(int n) {
int x = count(n);
int rem = 0, m = 0;
while (n) {
rem = n % 10;
m += power(rem, x);
n /= 10;
}
return m;
}
int main() {
int n = 1634;
if (n == perfect_number(n))
printf("Number is a perfect_number\n");
else
printf("Number is not a perfect_number\n");
return 0;
}
ผลลัพธ์
Number is a perfect_number