
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Count of Numbers Satisfying m + Sum(m) + Sum(Sum(m)) in C++
Given a number N as input. The goal is to find numbers m upto N that satisfy the following condition. Here N<=109
m + sum(m) + sum ( sum (m) ) = N. Where sum(m) is the sum of digits of m.
If m is 137 then sum(m)=1+3+7=11 and sum(sum(m))= sum(11)= 1+1=2
Let us understand with examples.
For Example
Input - N=27
Output - Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 3
Explanation - The numbers are:
9 ( 9 + 9 + 9 = 27 )
15 ( 15 + (1+5) + (6) = 27 )
21 ( 21 + (2+1) + (3) = 27 )
Input - N=81
Output - Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2
Explanation - The numbers are:
63 ( 63 + (6+3) + 9 = 81 )
66 ( 66 + (6+6) + (1+2) = 81 )
Approach used in the below program is as follows
In this approach we will calculate sums of digits of numbers and compare the added sums with N. If the calculated sum is equal to N then increment count. At the end return count as result.
As largest number could be 109 then maximum sum of digits of m can be 81 ( 9*9 ) and the next maximum sum of digits for sum(sum(m)) can be 16 ( 7+9 for 79 ). So we will check for numbers from N-97 to N as integers smaller than N-97 and greater than N will not satisfy the given condition.
- Take integer N as input.
- Function total(int num) takes a number total and returns the sum of its digits.
- Take res_total as the sum of digits and res as current remainder. Initialize both with 0.
- Traverse each unit digit using a while loop.
- Take the unit digit as res=num % 10 and add to res_total.
- Reduce num by 10 for next digit.
- Return res_total as sum of digits of num at the end.
- Function condition(int N) takes N and returns the count of numbers satisfying m + sum(m) + sum(sum(m)).
- Take the initial count as 0.
- Traverse using for loop from i=N-97 to i<=N.
- Calculate sum of digits as temp_1=total(i).
- Calculate sum of digits of total(i) as total(temp_1).
- Set temp_3 = i + temp_1 + temp_2. If it is equal to N then increment count.
- At the end of for loop return count as result.
Example
#include <bits/stdc++.h> using namespace std; int total(int num) { int res_total = 0; int res = 0; while (num > 0) { res = num % 10; res_total = res_total + res; num = num / 10; } return res_total; } int condition(int N) { int count = 0; for (int i = N - 97; i <= N; i++) { int temp_1 = total(i); int temp_2 = total(temp_1); int temp_3 = i + temp_1 + temp_2; if (temp_3 == N) { count++; } } return count; } int main() { int N = 9999; cout << "Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: " << condition(N); return 0; }
If we run the above code it will generate the following output −
Output
Count of numbers satisfying m + sum(m) + sum(sum(m)) = N are: 2