ตัวเลขที่ผลรวมของหลักที่ขับเคลื่อนด้วยตำแหน่งตามลำดับเท่ากับตัวเลขนั้นเรียกว่าตัวเลข 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