C++中統計首位數字相同的數字個數


給定一個區間[first, last]。目標是在此區間內查詢首位數字相同的數字的個數。例如,232的首位數字與2相同。

我們將透過從i=first遍歷到i=last來實現這一點。對於每個數字,我們將比較它的首位數字與最後一位數字,如果它們相同,則遞增計數。

讓我們透過例子來理解。

輸入 − first=8 last=40

輸出 − 首位數字相同的數字個數 − 5

解釋 − 8到40之間首位數字相同的數字 − (8, 11, 22, 33, 44)

8, 9, 11, 22, 33

輸入 − first=100 last=200

輸出 − 首位數字相同的數字個數:5

解釋 − 100到200之間首位數字相同的數字 − (101,111,121,131,141,151,161,171,181,191,202)

101, 111, 121, 131, 141, 151, 161, 171, 181, 191.

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

  • 我們使用兩個整數first和last來定義範圍[first,last]。

  • 函式getFirstDigit(int num)接受一個數字並返回它的首位數字。

  • 當num>=10時,將num除以10。最後,num將包含首位數字。返回此值。

  • 函式getCount(int fst,int lst)接受範圍變數並返回首位數字相同的數字的個數。

  • 將初始計數設定為0。

  • 使用for迴圈從i=fst開始到i=lst結束,對於每個i,透過呼叫getFirstDigit(i)計算其首位數字並存儲在fdigit中。(fdigit=getFirstDigit(i))。

  • 計算最後一位數字為ldigit=i%10。

  • 如果ldigit==fdigit,則表示它們相同。遞增計數。

  • 返回計數作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
//to find starting digit
int getFirstDigit(int num){
   while (num >= 10)
      { num = num/ 10; }
   return num;
}
int getCount(int fst,int lst){
   int count=0;
   for(int i=fst;i<=lst;i++){
      int fdigit=getFirstDigit(i);
      int ldigit=i%10; //to get last digit
      if(fdigit==ldigit) //if both are equal increment count
         { ++count; }
   }
   return count;
}
int main(){
   int first = 10, last = 23;
   cout<<"Numbers with same first and last digits:"<<getCount(first, last);
   return 0;
}

輸出

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

Numbers with same first and last digits:2

更新於:2020年8月29日

383 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告