C++ 中計算所有滿足 num + Rev(num) = 10^N - 1 的 N 位數的數量


給定一個輸入數字 N。目標是找到所有 N 位數的數量,這些數字的和滿足 num + Rev(num) = 10N − 1

num+rev(num)=10N−1

例如

輸入

N=4

輸出

所有滿足 num + Rev(num) = 10N − 1 的 N 位數的數量為 - 90

解釋

The numbers would be −

1. 1188 + 8811 = 9999
2. 2277 + 7722 = 9999
3. 1278 + 8721 = 9999
……...total 90 numbers

輸入

N=5

輸出

Count of all N digit numbers such that num + Rev(num) = 10N − 1 are − 0

解釋

As N is odd, there will be no such number as the middle element will be
added to itself and cannot have sum as 9.
Ex. 148+841=989

**下面程式中使用的方案如下** -

對於任何 N 位數,如果該數字及其反轉數字中各個數字的和都為 9,則它與反轉數字的和將為 9N−1 = 999..N 次(N 個 9)。對於奇數 N,中間數字將與其自身相加。由於沒有兩個相同的整數的和為 9,因此答案將為 0。對於偶數 N,第 1 位和第 N 位、第 2 位和第 N-1 位、第 3 位和第 N-2 位…數字必須為 9。可能的組合為 (1+8), (2+7), (3+6), (4+5), (5+4) ,(6+3), (7+2), (8+1), (9+0)。答案將為 **9*10N/2 − 1**

  • 將整數 N 作為輸入。

  • 函式 digit_numbers(int N) 獲取 N 並返回所有滿足 num + Rev(num) = 10^N − 1 的 N 位數的數量。

  • 將初始計數設定為 0。

  • 如果 N 為奇數,則 N%2 為 1。返回 0。

  • 否則,設定 count = 9 * pow(10, N/2 − 1)。

  • 返回 count 作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
int digit_numbers(int N){
   int count = 0;
   if (N % 2 == 1){
      return 0;
   } else {
      count = 9 * pow(10, N/2 − 1);
   }
   return count;
}
int main(){
   int N = 4;
   cout<<"Count of all N digit numbers such that num + Rev(num) = 10^N − 1 are: "<<digit_numbers(N);
   return 0;
}

輸出

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

Count of all N digit numbers such that num + Rev(num) = 10^N − 1 are: 90

更新於: 2021年1月5日

93 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告