给定范围[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,而(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){ //倒数 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 <<" 与反向的差是k的乘积的数字:"<<countNumbers(L,R,K); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
与反向的差是k的乘积的数字:4