C++中计算其与反转数之差为k的倍数的数字


给定一个范围[l,r]和一个数字k。目标是在l和r之间找到所有数字(l<=number<=r),使得(该数字的反转数)-(该数字)的结果是k的倍数。

我们将从l到r开始检查这个条件,计算每个数字的反转数。现在从其反转数中减去该数字,并检查(绝对差)%k==0。如果是,则递增计数。

让我们通过示例来理解。

输入 − L=21, R=25, K=6

输出 − 数字计数 − 2

说明

The numbers their reverse and difference is:
21, 12, | 21-12 |=9, 9%6!=0
22, 22, | 22-22 |=0 0%6=0 count=1
23,32,  | 32-23 | =9 9%6!=0
24,42,  | 42-24 | =18 18%6=0 count=2
25,52,  | 52-25 | =27 27%6!=0
Total numbers that meet the condition are 2 ( 22,24 )

输入 − L=11, R=15, K=5

输出 − 数字计数 − 1

说明

The only number is 11 , | 11-11 | is 0 and 0%5=0

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

  • 我们取整数L和R来定义范围。以及K用于检查可整除性。

  • 函数countNumbers(int l, int r, int k)以l、r和k作为输入,并返回满足所需条件的数字个数。

  • 将初始计数设为0。

  • 取数字的反转数rev=0。

  • 取余数rem=0。

  • 从i=l到i=r开始。

  • 将当前数字i存储在num中,其rev=0。

  • 现在反转数字num,while(num>0)。rem=num%10. rev=rev*10+rem. num=num/10。

  • while循环结束后,rev包含i的反转数。

  • 计算rev和原始值i的绝对差。如果这个差| i-rev |%k==0。然后递增计数。

  • 对范围内的所有数字执行此操作。

  • 返回count的最终值作为其与反转数之差为k的倍数的数字。

示例

 在线演示

#include <iostream>
using namespace std;
int countNumbers(int l, int r, int k){
   int rev = 0;
   int count=0;
   int rem=0;
   for (int i = l; i <= r; i++){
      int num=i;
      rev=0;
      while (num > 0){
         // reverse the number
         rem=num%10;
         rev = rev * 10 + rem;
         num /= 10;
      }
      if((abs(i-rev))%k==0) //original number is i and its reverse is rev
         { count++; }
   }
   return count;
}
int main(){
   int L= 18, R = 24, K = 6;
   cout <<" Numbers whose difference with reverse is product of k:"<<countNumbers(L,R,K);
   return 0;
}

输出

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

Numbers whose difference with reverse is product of k:4

更新于:2020年8月29日

70 次查看

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.