判断是否为——ArmstrongNumber(阿姆斯特朗数/阿姆斯壮数)

首先要知道什么是阿姆斯特朗数?

维基百科

好了,我们已知什么是阿姆斯特朗数,就要开始判断了:

1、求出给定数字的位数:

  • 调用math函数:
floor(log10(num) + 1);
// floor返回小于等于参数的最大整数
// 别忘了要包括头文件:include 
  • 也可以自己利用while()自己编写:
int digits = 0;      // digits为位数的意思
while (num != 0) {
     
	num /= 10;
	++digits;
}

2、求出每一位的数字并依次以位数次方相加

  • 方法一:
// find the sum of its own digits each raised to the power of the number of digits
	for (i;i < input;i *= 10)
	{
     	
		result += round(pow((input % (10 * i)) / i,digits));
	}
	// 原理就是我们要求的每一位等于:
 ...... 	 	num%10000/1000		num%1000/100   num%100/10	num%10/1
                   倒第四位           倒第三位       倒第二位     倒第一位                 

举个例子: 就拿5432来说吧:
5 = 5432%10000/10000
4 = 5432%1000/100
3 = 5432%100/10
2 = 5432%10/1
我们可以发现其中的规律,就可以用for()循环来表示

  • 方法二:
int exponent;
int sum = 0;

  exponent = floor(log10(number) + 1);

  while (number > 0) {
     
    int digit = number % 10;
    sum = sum + pow(digit, exponent);
    number /= 10; 
  }
   // 此处和方法一大同小异,方法一没有改变num的值,而此方法是一直对num进行操作,结果还是相同

还是拿5432举个例子吧:
2 = 5432 % 10
3 = 543 % 10
4 = 54 % 10
5 = 5 % 10

3、代码整合:

  • 方法一:
#include "armstrong_numbers.h"
#include 
#include 

void isArmstrongNumber(int num) {
     
	int input = num;
	int digits = 0,result = 0,i = 1;
	
	// find the digits of num
	while (num != 0)
	{
     
		num /= 10;
		++ digits;
	}

	// find the sum of its own digits each raised to the power of the number of digits
	for (i;i < input;i *= 10)
	{
     	
		result += round(pow((input % (10 * i)) / i,digits));
	}
	
	// judge whether the result == num
	if (input == result)
	{
     
		printf("%d is a Armstrong Numbers",input);
	} else {
     
		printf("%d is not a Armstrong Numbers",input);
	}

}
  • 方法二:
#include "armstrong_numbers.h"
#include 
#include 
#include 

bool isArmstrongNumber(int number)
{
     
  int exponent;
  int final = number;
  int sum = 0;

  exponent = floor(log10(number) + 1);

  while (number > 0) {
     
    int digit = number % 10;
    sum = sum + pow(digit, exponent);
    number /= 10; 
  }

  return sum == final;
}

你可能感兴趣的:(C,c++,算法)