# Nth character in Concatenated Decimal String

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
```

## Recommended: Please solve it on “PRACTICE” first, before moving on to the solution.

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++

 `// 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 ` `?> `

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.

My Personal Notes arrow_drop_up

Improved By : Mithun Kumar

Article Tags :
Practice Tags :

2

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.