หมายเลข Pandigital − ในวิชาคณิตศาสตร์ หมายเลข Pandigital เป็นจำนวนเต็มที่ในฐานที่กำหนดมีตัวเลขนัยสำคัญแต่ละหลักที่ใช้ในฐานอย่างน้อยหนึ่งครั้ง
ตัวเลข Pandigital คือจำนวนเต็มซึ่งแต่ละหลักถูกใช้เป็นฐานอย่างน้อยหนึ่งครั้ง
เช่น 1245678 เป็นตัวเลขหลัก
แนวทางการแก้ปัญหานี้
-
ป้อนตัวเลขและฐาน
-
ตรวจสอบฐานว่าน้อยกว่า 2 และมากกว่า 10 แล้วส่งกลับ 1 มิฉะนั้นให้ตรวจสอบตัวเลขว่าเป็น pandigital หรือไม่
-
ฟังก์ชัน Integer is_pandigital(long long n, int base) รับค่าตัวเลขและฐานเป็นอินพุต
-
นับสำหรับตัวเลขทั้งหมดที่มีอยู่ในตัวเลขและเพิ่มการนับ
-
วนซ้ำทุกหลักเพื่อดูว่ามีตัวเลขว่างหรือไม่ ดังนั้นให้คืนค่าเท็จ
-
ฟังก์ชัน Integer is_zeroless (long long n, int base) รับอินพุตและตัวเลขและฐานเป็นอินพุตและส่งคืนหากพบตัวเลข
-
การวนซ้ำทุกหลักจะพบว่ามีตัวเลขใดว่างอยู่หรือไม่ จะส่งคืนค่า 0
-
สุดท้าย ฟังก์ชัน check_number(long long number, int base) ใช้ตัวเลขและฐานเป็นอินพุต ฟังก์ชันจะคืนค่า 1 หากค้นหาเป็น 0 อย่างอื่น
ตัวอย่าง
#include <iostream.h>" 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; cin>>"Enter a number"; cout<<number; cin>>"Enter Base"; cout<<base; if(base < 2 || base > 10){ return 1; } if(check_number(number, base)){ if(is_pandigital(number, base)){ cout<<number<<""<<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){ /* define an array to store the count of all digits */ int digits[10], i; memset(digits, 0, sizeof(int)*10); /* for every digit in number, then increment count by one */ while(number > 0){ int digit = number % 10; ++digits[digit]; number /= 10; } /* iterate over all the digits to see if there's an empty one, if so return false */ for(i = 0; i < base; ++i) if(digits[i] == 0) return 0; /* if no empty digit found, return true */ return 1; } int is_zeroless_pandigital(long long number, int base){ /* define an array to store the count of all digits */ int digits[10], i; memset(digits, 0, sizeof(int)*10); /* for every digit in number, increment count by one */ while(number > 0){ int digit = number % 10; if(digit == 0) return 0; ++digits[digit]; number /= 10; } /* iterate over digits to see if there's an empty one, if so return false */ for(i = 1; i < base; ++i) if(digits[i] == 0) return 0; /* if no empty digit found, return true */ return 1; } /* This function checks if given number is valid in the given base */ 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.