C++中计算范围内首位数字等于末位数字的个数


给定一个从起始值到结束值的数字范围。目标是找到首位数字等于末位数字并且落在[起始值, 结束值]范围内的数字个数。

如果一位数在范围内,则将其计数。

让我们通过例子来理解。

例如

输入 - 起始值 = 100,结束值 = 200

输出 - 范围内首位数字等于末位数字的个数为:10

解释 - 数字将是

101, 121, 131, 141, 151, 161, 171, 181 和 191。

输入 - 起始值 = 1,结束值 = 10

输出 - 范围内首位数字等于末位数字的个数为:9

解释 - 所有一位数都将被计数。1, 2, 3, 4, 5, 6, 7, 8, 9

下面程序中使用的方法如下

如果所有一位数都在[起始值,结束值]范围内,则将它们计数。现在,对于每个数字,检查首位和末位数字。如果首位数字大于末位数字,则将8 + val/10添加到计数中;如果小于,则将9 + val/10添加到计数中。这里val是在对range(int val)的递归调用中的当前数字。

  • 将整数起始值和结束值作为范围变量。
  • 设置 count = range(结束值) - range(起始值)。
  • 函数 range(int val) 获取整数并返回范围内首位数字等于末位数字的个数。
  • 将初始计数设置为0。
  • 将结束值设置为最后一位数字,即val%10。
  • 如果它是一位数(小于10),则返回val。
  • 现在使用while循环计算起始值=val%10。将val减少10。因此,起始值将包含首位数字。
  • 现在,如果起始值<=结束值,则将9 + set_val / 10添加到计数中。
  • 现在,如果起始值>结束值,则将8 + set_val / 10添加到计数中。
  • 最后,返回计数作为结果。

示例

在线演示

#include <iostream>
using namespace std;

int range(int val) {
   int count = 0;
   int start;
   int end = val % 10;
   int set_val = val;

   if (val < 10) {
      return val;
   }
   end = val % 10;
   while (val) {
      start = val % 10;
      val = val / 10;
   }
   if (start <= end) {
      count = 9 + set_val / 10;
   } else {
      count = 8 + set_val / 10;
   }
   return count;
}
int main() {
   int start = 10, end = 50;
   int count = range(end) - range(start);
   cout << "Count of Numbers in Range where first digit is equal to last digit of the number are: " << count;
   return 0;
}

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

输出

Count of Numbers in Range where first digit is equal to last digit of the number are: 4

更新于: 2021年1月29日

422 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告