Find M-th number whose repeated sum of digits of a number is N
Given two positive integers N and M, The task is to find the M-th number whose sum of digits of a number until the sum becomes a single digit is N.
Examples:
Input: N = 1, M = 3
Output: 19
The first two numbers are 1 and 10.
Input: N = 2, M = 5
Output: 38
The first four numbers are 2, 11, 20, and 29.
A naive approach is to iterate for all numbers and keep a count of numbers whose sum returns N.
- Create a function singleDigit that takes an integer as input, and returns the single-digit number obtained by summing up the digits of the input number and repeating until the sum is a single-digit number.
- Define a function findMthNum which takes two inputs, N and M
- Initialize a variable count to 0
- Initialize a variable i to 1
- Use while loop, while true
- calculate the single digit number of i using function singleDigit
- check if the single-digit number is equal to N, if yes, increment the count by 1
- check if the count is equal to M, if yes, return i
- increment i
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
int singleDigit( long long n)
{
int result;
while ( true ) {
string s = to_string(n);
int sum = 0;
for ( auto i : s)
sum += (i - '0' );
if (sum > 9) {
n = sum;
}
else {
result = sum;
break ;
}
}
return result;
}
int findMthNum( int N, int M)
{
int count = 0;
int i = 1;
while ( true ) {
int sum = singleDigit(i);
if (sum == N) {
count++;
}
if (count == M) {
return i;
}
i++;
}
}
int main()
{
int N = 2;
int M = 5;
cout << "Mth number whose sum of digits is " << N
<< " is : " << findMthNum(N, M);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
public class Gfg {
public static int singleDigit( long n)
{
int result;
while ( true ) {
String s = String.valueOf(n);
int sum = 0 ;
for ( int i = 0 ; i < s.length(); i++) {
sum += (s.charAt(i) - '0' );
}
if (sum > 9 ) {
n = sum;
}
else {
result = sum;
break ;
}
}
return result;
}
public static int findMthNum( int N, int M)
{
int count = 0 ;
int i = 1 ;
while ( true ) {
int sum = singleDigit(i);
if (sum == N) {
count++;
}
if (count == M) {
return i;
}
i++;
}
}
public static void main(String[] args)
{
int N = 2 ;
int M = 5 ;
System.out.println(
"Mth number whose sum of digits is " + N
+ " is : " + findMthNum(N, M));
}
}
|
Python3
def singleDigit(n):
result = 0
while ( 1 ):
s = str (n)
sum = 0
for i in range ( 0 , len (s)):
sum = sum + int (s[i])
if ( sum > 9 ):
n = sum
else :
result = sum
break
return result
def findMthNum(N, M):
count = 0
i = 1
while ( 1 ):
sum = singleDigit(i)
if ( sum = = N):
count = count + 1
if (count = = M):
return i
i = i + 1
N = 2
M = 5
print ( "Mth number whose sum of digits is " , N, " is : " , findMthNum(N, M));
|
C#
using System;
class HelloWorld {
public static int singleDigit( int n)
{
int result = 0;
while ( true ) {
string s = n.ToString();
int sum = 0;
for ( int i = 0; i < s.Length; i++){
sum += (s[i] - '0' );
}
if (sum > 9) {
n = sum;
}
else {
result = sum;
break ;
}
}
return result;
}
public static int findMthNum( int N, int M)
{
int count = 0;
int i = 1;
while ( true ) {
int sum = singleDigit(i);
if (sum == N) {
count = count + 1;
}
if (count == M) {
return i;
}
i = i + 1;
}
}
static void Main() {
int N = 2;
int M = 5;
Console.WriteLine( "Mth number whose sum of digits is " + N + " is : " + findMthNum(N, M));
}
}
|
Javascript
function singleDigit(n)
{
let result;
while ( true ) {
let s = n.toString();
let sum = 0;
for (let i of s)
sum += parseInt(i);
if (sum > 9) {
n = sum;
}
else {
result = sum;
break ;
}
}
return result;
}
function findMthNum( N, M)
{
let count = 0;
let i = 1;
while ( true ) {
let sum = singleDigit(i);
if (sum == N) {
count++;
}
if (count == M) {
return i;
}
i++;
}
}
let N = 2;
let M = 5;
console.log( "Mth number whose sum of digits is " + N
+ " is : " + findMthNum(N, M));
|
Output
Mth number whose sum of digits is 2 is : 38
Time Complexity: O(N*M), where N is the number whose sum of digits is being calculated and M is the number of digits in the input number.
Auxiliary Space: O(1), as it uses only a constant amount of memory.
An efficient approach is to find the summation of digits till it becomes single digits in O(1) which has been discussed here. Hence the formula to find the M-th number will be:
Mth number: (M-1)*9 + N
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int findNumber( int n, int m)
{
int num = (m - 1) * 9 + n;
return num;
}
int main()
{
int n = 2, m = 5;
cout << findNumber(n, m);
return 0;
}
|
Java
import java.io.*;
public class GFG
{
static int findNumber( int n, int m)
{
int num = (m - 1 ) * 9 + n;
return num;
}
public static void main(String args[])
{
int n = 2 , m = 5 ;
System.out.print(findNumber(n, m));
}
}
|
Python3
def findNumber(n, m) :
num = (m - 1 ) * 9 + n;
return num;
if __name__ = = "__main__" :
n = 2 ;
m = 5 ;
print (findNumber(n, m))
|
C#
using System;
class GFG
{
static int findNumber( int n, int m)
{
int num = (m - 1) * 9 + n;
return num;
}
public static void Main()
{
int n = 2, m = 5;
Console.Write(findNumber(n, m));
}
}
|
PHP
<?php
function findNumber( $n , $m )
{
$num = ( $m - 1) * 9 + $n ;
return $num ;
}
$n = 2; $m = 5;
echo findNumber( $n , $m );
?>
|
Javascript
<script>
function findNumber(n , m) {
var num = (m - 1) * 9 + n;
return num;
}
var n = 2, m = 5;
document.write(findNumber(n, m));
</script>
|
Time Complexity: O(1), as we are doing constant time operations without using any loops or recursion.
Auxiliary Space: O(1), as we are not using any extra space.
Last Updated :
02 Feb, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...