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

Pandigital Numbers คืออะไร วิธีหา Pandigital Numbers ด้วย C++

Pandigital Number - ในคณิตศาสตร์ Pandigital number คือจำนวนเต็มที่ในฐานที่กำหนดมีหลักสำคัญแต่ละหลักใช้ตัวเลขในฐานนั้นอย่างน้อยหนึ่งครั้ง

Pandigital numbers คือจำนวนเต็มที่แต่ละหลักถูกใช้เป็นฐานอย่างน้อยหนึ่งครั้ง

ตัวเช่น 1245678 เป็น pandigital number

วิธีการแก้ปัญหา

  • รับอินพุตตัวเลขและฐาน (base)
  • ตรวจสอบฐานถ้ามันน้อยกว่า 2 และมากกว่า 10 ให้คืนค่า 1 มิฉะนั้นตรวจสอบตัวเลขว่ามันเป็น pandigital หรือไม่
  • ฟังก์ชัน Integer is_pandigital(long long n, int base) รับตัวเลขและฐานเป็นอินพุต
  • นับสำหรับทุกหลักที่มีอยู่ในตัวเลขและเพิ่มจำนวนนับ
  • วนลูปผ่านทุกหลักเพื่อดูว่ามีหลักว่างหรือไม่ ถ้ามีให้คืนค่า false
  • ฟังก์ชัน Integer is_zeroless (long long n, int base) รับอินพุตและตัวเลขและฐานเป็นอินพุตและคืนค่าถ้าพบหลัก
  • วนลูปผ่านทุกหลัก หากมีหลักใดว่าง จะคืนค่า 0
  • สุดท้าย ฟังก์ชัน check_number(long long number, int base) รับตัวเลขและฐานเป็นอินพุต ฟังก์ชันคืนค่า 1 ถ้าพบ มิฉะนั้น 0

ตัวอย่างโค้ด

#include <iostream>
using namespace std;

int is_pandigital(long long number, int base);
int is_zeroless_pandigital(long long number, int base);
int check_number(long long number, int base);

int main() {
    long long number;
    int base;
    cout << "Enter a number: ";
    cin >> number;
    cout << "Enter Base: ";
    cin >> base;
    
    if (base < 2 || base > 10) {
        return 1;
    }
    
    if (check_number(number, base)) {
        if (is_pandigital(number, base)) {
            cout << number << " is a pandigital number in base " << base;
        } else {
            cout << number << " is not a pandigital number in base " << base;
        }
        if (is_zeroless_pandigital(number, base)) {
            cout << number << " is a zeroless pandigital number in base " << base;
        } else {
            cout << number << " is not a zeroless pandigital number in base " << base;
        }
    } else {
        cout << number << " is not a valid number in base " << base;
    }
    return 0;
}

int is_pandigital(long long number, int base) {
    int digits[10], i;
    memset(digits, 0, sizeof(int) * 10);
    while (number > 0) {
        int digit = number % 10;
        ++digits[digit];
        number /= 10;
    }
    for (i = 0; i < base; ++i)
        if (digits[i] == 0)
            return 0;
    return 1;
}

int is_zeroless_pandigital(long long number, int base) {
    int digits[10], i;
    memset(digits, 0, sizeof(int) * 10);
    while (number > 0) {
        int digit = number % 10;
        if (digit == 0) return 0;
        ++digits[digit];
        number /= 10;
    }
    for (i = 1; i < base; ++i)
        if (digits[i] == 0)
            return 0;
    return 1;
}

int check_number(long long number, int base) {
    while (number > 0) {
        int digit = number % 10;
        if (digit > base - 1) return 0;
        number /= 10;
    }
    return 1;
}

ผลลัพธ์

Enter a number: 45
Enter base(min:2 to max-10): 10
45 is not a valid number.