一个数字的数字之和以其各自的位置为幂等于该数字本身的数字称为 disarium 数字。
该noOfDigits(int num)函数获取数字并通过不断将数字除以 10 来返回数字的位数,而只剩下一个位。在每次迭代中,digits 变量会递增以保持数字跟踪,并在 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 循环一直运行到没有数字为止。如果总和等于 num,则返回 true,否则返回 false。
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