ตัวเลขที่ผลรวมของหลักที่ขับเคลื่อนด้วยตำแหน่งตามลำดับเท่ากับตัวเลขนั้นเรียกว่าตัวเลข disarium
ฟังก์ชัน noOfDigits(int num) ใช้ตัวเลขและส่งคืนจำนวนหลักโดยหารตัวเลขด้วย 10 อย่างต่อเนื่องในขณะที่เหลือเพียงตำแหน่งเดียวเท่านั้น ในการวนซ้ำแต่ละครั้ง ตัวแปรตัวเลขจะเพิ่มขึ้นเพื่อให้ติดตามตัวเลขและจะถูกส่งคืนเมื่อลูป while สิ้นสุด
int noOfDigits(int num){ int digits = 0; int temp = num; while (temp){ temp= temp/10; digits++; } return digits; }
ต่อไป isDisarium(int num) เป็นฟังก์ชันบูลีนที่ใช้ตัวเลขและตรวจสอบว่าเป็นหมายเลข Disarium หรือไม่ ใช้หลักขวาสุดด้วยหมายเลข mod 10 และจ่ายไฟให้กับหลักที่วางไว้ในระบบตัวเลข ผลลัพธ์จากการเพิ่มจำนวนจะถูกบวกเข้ากับผลรวม while loop ทำงานจนไม่มีตัวเลขเหลือ หากผลรวมเท่ากับ num จะคืนค่า true มิฉะนั้นจะคืนค่าเท็จ
isDisarium(int num){ int digits = noOfDigits(num); int sum = 0; int temp = num; while (temp){ int rightDigit = temp%10; sum = sum + pow(rightDigit, digits--); temp = temp/10; } return (sum == num); }
ตัวอย่าง
ให้เราดูการดำเนินการต่อไปนี้เพื่อตรวจสอบว่าตัวเลขเป็นตัวเลข disarium หรือไม่
#include<iostream> #include<math.h> using namespace std; int noOfDigits(int num){ int digits = 0; int temp = num; while (temp){ temp= temp/10; digits++; } return digits; } bool isDisarium(int num){ int digits = noOfDigits(num); int sum = 0; int temp = num; while (temp){ int rightDigit = temp%10; sum = sum + pow(rightDigit, digits--); temp = temp/10; } return (sum == num); } int main(){ int num = 518; if( isDisarium(num)) cout <<num<<" is a Disarium Number"<<endl; else cout << num<<" is not a Disarium Number"<<endl; return 0; }
ผลลัพธ์
รหัสข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -
518 is a Disarium Number