Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

โปรแกรม C ตรวจสอบ Strong Number (เลขที่ผลรวมแฟกทอเรียลเท่าตัวมัน)

Strong Number** คือ ตัวเลขที่ผลรวมของแฟกทอเรียลแต่ละหลัก เท่ากับตัวเลขนั้นเอง

ตัวอย่าง

  • 145: 1! + 4! + 5! = 1 + 24 + 120 = 145 ✓ Strong
  • 123: 1! + 2! + 3! = 1 + 2 + 6 = 9 ≠ 123 ✗ Not Strong
  • 40585: 4! + 0! + 5! + 8! + 5! = 24 + 1 + 120 + 40320 + 120 = 40585 ✓ Strong

อัลกอริทึม

  1. เก็บตัวเลขต้นฉบับไว้ (temp)
  2. วนลูปดึงหลักสุดท้าย (n % 10)
  3. คำนวณแฟกทอเรียลของหลักนั้น
  4. บวกสะสม (sum += fact)
  5. ตัดหลักสุดท้าย (n /= 10)
  6. ทำจน n = 0
  7. เปรียบเทียบ sum กับ temp

โค้ดคำนวณแฟกทอเรียล (Optimization)

แทนที่จะคำนวณแฟกทอเรียลซ้ำ ให้ Pre-compute 0! ถึง 9! ไว้:

int fact[10] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};

ตัวอย่างโปรแกรม (Basic)

#include <stdio.h>

int main() {
    int n, temp, rem, sum = 0, fact;
    
    printf("Enter a number: ");
    scanf("%d", &n);
    
    temp = n;
    
    while(n > 0) {
        rem = n % 10;
        
        // คำนวณแฟกทอเรียล
        fact = 1;
        for(int i = 1; i <= rem; i++)
            fact *= i;
        
        sum += fact;
        n /= 10;
    }
    
    if(sum == temp)
        printf("%d is a Strong Number\n", temp);
    else
        printf("%d is NOT a Strong Number\n", temp);
    
    return 0;
}

ตัวอย่างโปรแกรม (Optimized - Lookup Table)

#include <stdio.h>

int main() {
    int n, temp, rem, sum = 0;
    int fact[10] = {1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880};
    
    printf("Enter a number: ");
    scanf("%d", &n);
    
    temp = n;
    
    while(n > 0) {
        rem = n % 10;
        sum += fact[rem];  // O(1) Lookup
        n /= 10;
    }
    
    if(sum == temp)
        printf("%d is a Strong Number\n", temp);
    else
        printf("%d is NOT a Strong Number\n", temp);
    
    return 0;
}

ผลลัพธ์

Run 1:
Enter a number: 145
145 is a Strong Number

Run 2:
Enter a number: 25
25 is NOT a Strong Number

Run 3:
Enter a number: 40585
40585 is a Strong Number

Strong Numbers ที่รู้จัก (Base 10)

มีเพียง 4 ตัวเท่านั้น: 1, 2, 145, 40585

ความซับซ้อน

  • Time: O(d) โดย d = จำนวนหลัก (ใช้ Lookup Table)
  • Space: O(1)