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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告