Related Articles

# Nth character in Concatenated Decimal String

• Difficulty Level : Medium
• Last Updated : 25 Mar, 2021

If all decimal numbers are concatenated in a string then we will get a string which looks like string P as shown below. We need to tell Nth character of this string.
P = “12345678910111213141516171819202122232425262728293031….”

Examples:

```N = 10    10th character is 1
N = 11    11th character is 0
N = 50    50th character is 3
N = 190    190th character is 1```

We can solve this problem by break-ing the string length-wise. We know that in decimal 9 numbers are of length 1, 90 numbers are of length 2, 900 numbers are of length 3 and so on, so we can skip these numbers according to the given N and can get the desired character.

```Processing for N = 190 is explained below,
P[184..195] = “979899100101”
First getting length of number at N,
190 – 9 = 181        number length is more than 1
181 – 90*2 = 1       number length is more than 2
1 – 900*3 < 0        number length is 3
Now getting actual character at N,
1 character after maximum 2 length number(99) is,  1

Processing for N = 251 is explained below,
P[250..255] = “120121”
First getting length of number at N,
251 - 9 = 242             number length is more than 1
242 – 90*2 = 62           number length is more than 2
62 – 900*3 < 0            number length is 3
Now getting actual character at N,
62 characters after maximum 2 length number(99) is,
Ceil(62/3) = 21,  99 + 21 = 120
120 is the number at N, now getting actual digit,
62%3 = 2,
2nd digit of 120 is 2, so our answer will be 2 only.```

Please see below code for better understanding,

## C++

 `// C++ program to get Nth character in``// concatenated Decimal String``#include ``using` `namespace` `std;` `// Utility method to get dth digit of number N``char` `getDigit(``int` `N, ``int` `d)``{``    ``string str;``    ``stringstream ss;``    ``ss << N;``    ``ss >> str;``    ``return` `str[d - 1];``}` `// Method to return Nth character in concatenated``// decimal string``char` `getNthChar(``int` `N)``{``    ``// sum will store character escaped till now``    ``int` `sum = 0, nine = 9;` `    ``// dist will store numbers escaped till now``    ``int` `dist = 0, len;` `    ``// loop for number lengths``    ``for` `(len = 1; ; len++)``    ``{``        ``// nine*len will be incremented characters``        ``// and nine will be incremented numbers``        ``sum += nine*len;``        ``dist += nine;` `        ``if` `(sum >= N)``        ``{``            ``// restore variables to previous correct state``            ``sum -= nine*len;``            ``dist -= nine;``            ``N -= sum;``            ``break``;``        ``}``        ``nine *= 10;``    ``}` `    ``// get distance from last one digit less maximum``    ``// number``    ``int` `diff = ``ceil``((``double``)N / len);` `    ``// d will store dth digit of current number``    ``int` `d = N % len;``    ``if` `(d == 0)``        ``d = len;` `    ``// method will return dth numbered digit``    ``// of (dist + diff) number``    ``return` `getDigit(dist + diff, d);``}` `// Driver code to test above methods``int` `main()``{``    ``int` `N = 251;``    ``cout << getNthChar(N) << endl;``    ``return` `0;``}`

## Java

 `// Java program to get Nth character in``// concatenated Decimal String` `class` `GFG``{``    ` `// Utility method to get dth digit of number N``static` `char` `getDigit(``int` `N, ``int` `d)``{``    ``String str=Integer.toString(N);``    ``return` `str.charAt(d - ``1``);``}` `// Method to return Nth character in concatenated``// decimal string``static` `char` `getNthChar(``int` `N)``{``    ``// sum will store character escaped till now``    ``int` `sum = ``0``, nine = ``9``;` `    ``// dist will store numbers escaped till now``    ``int` `dist = ``0``, len;` `    ``// loop for number lengths``    ``for` `(len = ``1``; ; len++)``    ``{``        ``// nine*len will be incremented characters``        ``// and nine will be incremented numbers``        ``sum += nine * len;``        ``dist += nine;` `        ``if` `(sum >= N)``        ``{``            ``// restore variables to previous correct state``            ``sum -= nine * len;``            ``dist -= nine;``            ``N -= sum;``            ``break``;``        ``}``        ``nine *= ``10``;``    ``}` `    ``// get distance from last one digit``    ``// less maximum number``    ``int` `diff = (``int``)(Math.ceil((``double``)(N) / (``double``)(len)));` `    ``// d will store dth digit of current number``    ``int` `d = N % len;``    ``if` `(d == ``0``)``        ``d = len;` `    ``// method will return dth numbered digit``    ``// of (dist + diff) number``    ``return` `getDigit(dist + diff, d);``}` `// Driver code``public` `static` `void` `main (String[] args)``{``    ``int` `N = ``251``;``    ``System.out.println(getNthChar(N));``}``}` `// This code is contributed by mits`

## Python

 `# Python program to get Nth character in``# concatenated Decimal String`` ` `# Method to get dth digit of number N``def` `getDigit(N, d):``    ``string ``=` `str``(N)``    ``return` `string[d``-``1``];`` ` `# Method to return Nth character in concatenated``# decimal string``def` `getNthChar(N):` `    ``#  sum will store character escaped till now``    ``sum` `=` `0``    ``nine ``=` `9`` ` `    ``#  dist will store numbers escaped till now``    ``dist ``=` `0`` ` `    ``#  loop for number lengths``    ``for` `len` `in` `range``(``1``,N):``    ` `        ``# nine*len will be incremented characters``        ``# and nine will be incremented numbers``        ``sum` `+``=` `nine``*``len``        ``dist ``+``=` `nine``        ``if` `(``sum` `>``=` `N):``        ` `            ``#  restore variables to previous correct state``            ``sum` `-``=` `nine``*``len``            ``dist ``-``=` `nine``            ``N ``-``=` `sum``            ``break``            ` `        ``nine ``*``=` `10`` ` `    ``# get distance from last one digit less maximum``    ``# number``    ``diff ``=` `(N ``/` `len``) ``+` `1`` ` `    ``# d will store dth digit of current number``    ``d ``=` `N ``%` `len``    ``if` `(d ``=``=` `0``):``        ``d ``=` `len`` ` `    ``# method will return dth numbered digit``    ``# of (dist + diff) number``    ``return` `getDigit(dist ``+` `diff, d);`` ` `#  Driver code to test above methods``N ``=` `251``print` `getNthChar(N)` `# Contributed by Afzal_Saan`

## C#

 `// C# program to get Nth character in``// concatenated Decimal String``using` `System;` `class` `GFG``{``    ` `// Utility method to get dth digit of number N``static` `char` `getDigit(``int` `N, ``int` `d)``{``    ``string` `str = Convert.ToString(N);``    ``return` `str[d - 1];``}` `// Method to return Nth character in``// concatenated decimal string``static` `char` `getNthChar(``int` `N)``{``    ``// sum will store character``    ``// escaped till now``    ``int` `sum = 0, nine = 9;` `    ``// dist will store numbers``    ``// escaped till now``    ``int` `dist = 0, len;` `    ``// loop for number lengths``    ``for` `(len = 1; ; len++)``    ``{``        ``// nine*len will be incremented characters``        ``// and nine will be incremented numbers``        ``sum += nine * len;``        ``dist += nine;` `        ``if` `(sum >= N)``        ``{``            ``// restore variables to previous``            ``// correct state``            ``sum -= nine * len;``            ``dist -= nine;``            ``N -= sum;``            ``break``;``        ``}``        ``nine *= 10;``    ``}` `    ``// get distance from last one digit``    ``// less maximum number``    ``int` `diff = (``int``)(Math.Ceiling((``double``)(N) /``                                  ``(``double``)(len)));` `    ``// d will store dth digit of``    ``// current number``    ``int` `d = N % len;``    ``if` `(d == 0)``        ``d = len;` `    ``// method will return dth numbered``    ``// digit of (dist + diff) number``    ``return` `getDigit(dist + diff, d);``}` `// Driver code``static` `void` `Main()``{``    ``int` `N = 251;``    ``Console.WriteLine(getNthChar(N));``}``}` `// This code is contributed by mits`

## PHP

 `= ``\$N``)``        ``{``            ``// restore variables to``            ``// previous correct state``            ``\$sum` `-= ``\$nine` `* ``\$len``;``            ``\$dist` `-= ``\$nine``;``            ``\$N` `-= ``\$sum``;``            ``break``;``        ``}``        ``\$nine` `*= 10;``    ``}``    ` `    ``// get distance from last one``    ``// digit less maximum number``    ``\$diff` `= (``\$N` `/ ``\$len``) + 1;` `    ``// d will store dth digit``    ``// of current number``    ``\$d` `= ``\$N` `% ``\$len``;``    ``if` `(``\$d` `== 0)``        ``\$d` `= ``\$len``;` `    ``// method will return dth numbered``    ``// digit of (dist + diff) number``    ``return` `getDigit(``\$dist` `+ ``\$diff``, ``\$d``);``}` `// Driver code``\$N` `= 251;``echo` `getNthChar(``\$N``);` `// This code is contributed by mits``?>`

## Javascript

 ``

Output:

`2`

This article is contributed by Utkarsh Trivedi. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.