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
广告