C++ 中計算 m 位數且能被整數 n 整除的整數個數


給定兩個整數 m 和 n。目標是計算 m 位數中能被 n 整除的數字個數。

如果 m=1,則數字為 0,1,2,3,4,5,6,7,8,9,如果 n=3,則能被 3 整除的數字為 0,3,6,9,個數為 4。

讓我們透過例子來理解。

輸入 − m=2, n=9

輸出 − m 位數中能被 n 整除的數字個數 − 10

說明 − 在 10 和 99 之間,能被 9 整除的數字為 −

18, 27, 36, 45, 54, 63, 72, 81, 90, 99

輸入 m=3, n=300

輸出 − m 位數中能被 n 整除的數字個數:3

說明 − 在 100 和 999 之間,能被 300 整除的數字為 −

300, 600, 900

下面程式中使用的演算法如下

  • 我們獲取整數 m 和 n。

  • 計算最大的 m-1 位數作為 num1

  • 計算最大的 m 位數作為 num2

  • 函式 findCount(int n, int L, int R) 獲取 n 和範圍(num1 和 num2 之間)作為輸入,並返回該範圍內所有能被 n 整除的數字。

  • 將初始計數設定為 0。

  • 從 i=L 到 i=R 開始。如果 i%n==0,則遞增計數。

  • 返回計數作為結果。

示例

 即時演示

#include<bits/stdc++.h>
using namespace std;
// Returns count of m digit numbers having n
// as divisor
int findCount(int n, int L, int R){
   int count=0;
   int i;
   for(int i=L;i<=R;i++){
      if(i%n==0)
         { count++; }
   }
   return count;
}
int main(){
   int M = 2, N = 9;
   int i;
   int num1 = 0; //largest m-1 digit no.
   for (i = 0; i < (M - 1); i++)
      num1 = (num1 * 10) + 9;
   int num2 = 0; //largest m digit no.
   for (i = 0; i < M; i++)
      num2 = (num2 * 10) + 9;
   cout<<"Count of M digit no.s divisible by N:"<<findCount(N,num1+1,num2);
   return 0;
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Count of M digit no.s divisible by N:11

更新於: 2020-08-29

210 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.