C++中计算区间内能被所有非零数字整除的数字


我们提供两个数字START和END来定义一个数字范围。目标是找到[START,END]范围内所有能被其所有非零数字整除的数字。我们将通过遍历从START到END的数字来实现这一点,对于每个数字,我们将使用while循环检查该数字是否能被所有非零数字整除。如果是,则计数器加1。

让我们通过例子来理解。

输入 

START=10 END=20

输出 

Numbers that are divisible by all its non-zero digits: 14

解释 

Numbers 10, 11, 12, 15, 20 are divisible by all their non-zero digits.

输入 

START=100 END=200

输出 

Numbers that are divisible by all its non-zero digits: 25

解释 

This is list of numbers divisible by all non-zero digits : 100 101 102 104 105 110 111 112 115 120 122 124 126 128 132 135 140 144 150 155 162 168 175 184 200

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

  • 我们将整数START和END作为范围变量。

  • 函数divisiblebyDigits(int start, int end)接收范围变量并返回能被所有非零数字整除的数字个数。

  • 将初始变量count设置为0,表示此类数字的个数。

  • 将变量flag设置为0。

  • 使用for循环遍历数字范围。i=start到i=end。

  • 现在,对于每个数字num=i,使用while循环检查数字是否>0。

  • 计算digit=num%10。如果digit>0且i%digit==0,则设置flag=1。否则,flag=0并中断循环。将num=num/10以检查下一个数字。

  • 如果所有非零数字都能完全整除i,则flag为1。计数器加1。

  • 在所有循环结束时,count将包含能被非零数字整除的总数。

  • 返回count作为结果。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int divisiblebyDigits(int start, int end){
   int count = 0;
   int flag=0;
   for (int i = start; i <= end; i++){
      int num=i;
      while(num>0){
         int digit=num%10;
         if(digit>0){
            if(i%digit==0)
               { flag=1; } //set flag
            else{
               flag=0; //un-set flag
               break;
            }
         }
         num=num/10;
      }
      if(flag==1) //divisible by all non-zero digits {
         count++;
         //cout<<i<<" ";
      }
   }
   return count;
}
int main(){
   int START = 10, END = 50;
   cout <<"Numbers that are divisible by all its non-zero digits: "<< divisiblebyDigits(START,END);
   return 0;
}

输出

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

Numbers that are divisible by all its non-zero digits: 14

更新于:2020年10月31日

145 次浏览

开启您的职业生涯

完成课程获得认证

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