我们提供了两个数字START和END来定义数字范围。目标是找到[START,END]范围内的所有数字,这些数字中没有数字为0,并且数字的总和等于给定数字N。这些数字可以被M整除
我们将通过从START到END遍历数字来做到这一点,对于每个数字,我们将使用while循环(仅当所有数字都不为零时)计算其数字的总和。如果此总和等于N,并且该数字可被M整除,则递增计数。
让我们通过示例来理解。
输入项
START=1 END=100 N=9 M=6
输出结果
Numbers with digit sum N and divisible by M: 4
说明
Numbers 18, 36, 54, 72 have digit sum=9 and divisible by 6. None has 0 as a digit.
输入项
START=100 END=200 N=10 M=2
输出结果
Numbers with digit sum N and divisible by M: 4
说明
Numbers 118, 136, 154, 172 have digit sum=10 and divisible by 2. None has 0 as a digit.
我们采用整数START,END,N和M。
函数digitSum(int start,int end,int n,int m)返回具有digitsum = n且可被m整除并且具有所有非零数字的数字的计数。
对于此类数字,将初始变量计数设为0。
将变量digsum设为0
将变量标志设为0。
使用for循环遍历数字范围。我=开始我=结束
现在,对于每个数字num = i,如果num%m == 0(可被m整除),则向前移动。
使用while循环检查数字是否大于0。并找到数字。
digit = num%10。如果数字不为零,则计算digsum + = digit。减少num = num / 10以添加下一个数字。如果任何数字为0,则设置标志= 0并中断while循环
在片刻结束时,检查是否(digsum == n和flag == 1)。如果为真,则递增计数。
现在,将i增加m(以m的倍数)。
在所有循环的末尾,计数将具有满足条件的总数。
返回计数结果。
#include <bits/stdc++.h>
using namespace std;
int digitSum(int start, int end, int n, int m){
int count = 0;
int digsum = 0;
int flag=0;
for (int i = start; i <= end; i++){
int num=i;
digsum=0;
flag=0;
if(num%m==0){
while(num>0){
int digit=num%10;
if(digit==0){
flag=0;
break;
}
digsum+=num%10; //sum of digits
num=num/10;
flag=1;
}
if(digsum==n && flag==1) //original number is i {
count++;
cout<<i<<" ";
}
i+=m; //now increment in multiples of m
i--; // for loop has i++
}
}
return count;
}
int main(){
int START = 1;
int END = 100;
int N = 9;
int M = 6;
cout <<"Numbers with digit sum N and divisible by M: "<<digitSum(START,END,N, M);
return 0;
}输出结果
如果我们运行上面的代码,它将生成以下输出-
Numbers with digit sum N and divisible by M: 4