C++中计算范围内仅包含非零数字且数字和为N且能被M整除的数字个数
我们提供了两个数字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)返回数字和=n且能被m整除且所有数字都不为零的数字的个数。
将初始变量count设置为0,表示此类数字的个数。
将变量digsum设置为0。
将变量flag设置为0。
使用for循环遍历数字范围。i=start到i=end
现在对于每个数字num=i,如果num%m==0(能被m整除),则继续执行。
使用while循环检查数字是否>0。并找到数字。
digit=num%10。如果digit不为零,则计算digsum+=digit。将num=num/10减少以添加下一个数字。如果任何数字为0,则将flag=0并中断while循环。
在while循环结束时,检查是否( digsum == n and flag==1 )。如果是,则增加count。
现在将i增加m(以m的倍数增加)。
在所有循环结束时,count将包含满足条件的数字总数。
返回count作为结果。
示例
#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
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C编程
C++
C#
MongoDB
MySQL
Javascript
PHP