在C ++中计算范围内的一元数

给定两个数字,开始和结束代表一个范围。目标是找到在[开始,结束]之间存在的一元数的计数。

我们可以通过以下步骤检查数字是否为一元:如果我们采用数字13,则12 + 32 = 10,则12 + 02 = 1因此,这种方式的最终和为1,因此13是一元。

例如

输入值

start=1 end=20
输出结果
范围内的一元数计数为: 5

说明

The numbers are :
1, 7, 10, 12, and 13

输入值

start=50 end=100
输出结果
范围内的一元数计数为: 7

说明

The numbers are −
59, 63, 67, 74, 75, 78, and 89

以下程序中使用的方法如下-

在1到9之间的数字1和7是一元的。对于其他数字,我们将使用数字平方和,直到得到1。继续对范围内的所有数字进行此过程。以这种方式找到的所有一元数的增量计数。

  • 以两个整数开头,结尾作为输入。

  • 功能 check_unary(int number) 如果传递的值是一元,则返回true,否则返回false。

  • 功能 Unary_range(int start, int end) 接受范围变量并返回该范围内的一元数计数。

  • 将初始计数设为0。使用for循环,从i = start到end遍历。如果check_unary(i) 返回true,然后增加计数。

  • 内 check_unary(int number),进行临时变量计数。

  • 如果数字N为1、7,则返回true。对于所有其他小于10的数字,返回false(number / 10 == 0)。

  • 然后在while循环中计算数字的平方和。

  • 再打一次 check_unary(int number) 对于这样的连续和,直到和成为1。

  • 返回计数作为结果。

示例

#include <iostream>
using namespace std;
bool check_unary(int number){
   int total;
   if (number == 1 ){
      return true;
   }
   else if(number == 7){
      return true;
   }
   else if (number / 10 == 0){
      return false;
   }
   while (number!= 0){
      int temp = number % 10;
      total = total + temp * temp;
      number = number / 10;
   }
   check_unary(total);
}
int Unary_range(int start, int end){
   int count = 0;
   for (int i = start; i <= end; i++){
      if (check_unary(i) == 1){
         count++;
      }
   }
   return count;
}
int main(){
   int start = 200, end = 400;
   cout<<"范围内的一元数计数为: "<<Unary_range(start, end);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出-

范围内的一元数计数为: 31