N-th character in the string made by concatenating natural numbers
Given an integer N, the task is to find the N-th character in the string made by concatenating natural numbers (Integers beginning from 1). The starting string will be “12345678910111213..”.
Examples:
Input: N = 3 Output: 3 3rd character in the string "12345678910111213.." is 3. Input: N = 11 Output: 0 11th character in the string "12345678910111213..." is 0
The idea is to generate the required string until string length does exceed N.
- Initialize a Null string and c=1
- Add the c to the string by type-casting it to a character
- If c is a single-digit number, append it to the string
- if c is greater than 9, then store it in a temporary string and reverse it and append to the original string
- If at any moment the string length exceeds N, then return s[n-1].
Below is the implementation of the above approach:
C++
// C++ program to find the N-th character // in the string "1234567891011.." #include <bits/stdc++.h> using namespace std; // Function that returns the N-th character char NthCharacter( int n) { // initially null string string s = "" ; // starting integer int c = 1; // add integers in string for ( int i = 1;; i++) { // one digit numbers added if (c < 10) s += char (48 + c); // more than 1 digit number, generate // equivalent number in a string s1 // and concatenate s1 into s. else { string s1 = "" ; int dup = c; // add the number in string while (dup) { s1 += char ((dup % 10) + 48); dup /= 10; } // reverse the string reverse(s1.begin(), s1.end()); // attach the number s += s1; } c++; // if the length exceeds N if (s.length() >= n) { return s[n - 1]; } } } // Driver Code int main() { int n = 11; cout << NthCharacter(n); return 0; } |
Java
// Java program to find the N-th character // in the string "1234567891011.." class GFG { // Function that returns the N-th character static char NthCharacter( int n) { // initially null string String s = "" ; // starting integer int c = 1 ; // add integers in string for ( int i = 1 ;; i++) { // one digit numbers added if (c < 10 ) s += Integer.toString(c); // more than 1 digit number, generate // equivalent number in a string s1 // and concatenate s1 into s. else { String s1 = "" ; int dup = c; // add the number in string while (dup > 0 ) { s1 += Integer.toString(dup % 10 ); dup /= 10 ; } // reverse the string StringBuilder temp = new StringBuilder(); temp.append(s1); temp = temp.reverse(); // attach the number s += temp; } c++; // if the length exceeds N if (s.length() >= n) { return s.charAt(n - 1 ); } } } // Driver Code public static void main(String []args) { int n = 11 ; System.out.println( NthCharacter(n)); } } // This article is contributed by ihritik |
Python3
# Python 3 program to find the N-th character # in the string "1234567891011.." # Function that returns the N-th character def NthCharacter(n): # initially null string s = "" # starting integer c = 1 # add integers in string while ( True ) : # one digit numbers added if (c < 10 ): s + = chr ( 48 + c) # more than 1 digit number, generate # equivalent number in a string s1 # and concatenate s1 into s. else : s1 = "" dup = c # add the number in string while (dup > 0 ): s1 + = chr ((dup % 10 ) + 48 ) dup / / = 10 # reverse the string s1 = "".join( reversed (s1)) # attach the number s + = s1 c + = 1 # if the length exceeds N if ( len (s) > = n): return s[n - 1 ] # Driver Code if __name__ = = "__main__" : n = 11 print (NthCharacter(n)) # This code is contributed by ita_c |
C#
// C# program to find the N-th character // in the string "1234567891011.." using System; class GFG { // Function that returns the N-th character static char NthCharacter( int n) { // initially null string String s = "" ; // starting integer int c = 1; // add integers in string for ( int i = 1;; i++) { // one digit numbers added if (c < 10) s += c.ToString(); // more than 1 digit number, generate // equivalent number in a string s1 // and concatenate s1 into s. else { String s1 = "" ; int dup = c; // add the number in string while (dup > 0) { s1 += (dup % 10).ToString(); dup /= 10; } // reverse the string String temp = reverse(s1); // attach the number s += temp; } c++; // if the length exceeds N if (s.Length >= n) { return s[n - 1]; } } } static String reverse(String input) { char [] a = input.ToCharArray(); int l, r = 0; r = a.Length - 1; for (l = 0; l < r; l++, r--) { // Swap values of l and r char temp = a[l]; a[l] = a[r]; a[r] = temp; } return String.Join( "" , a); } // Driver Code public static void Main(String []args) { int n = 11; Console.WriteLine( NthCharacter(n)); } } // This code is contributed by Rajput-Ji |
Javascript
<script> // JavaScript program to find the N-th character // in the string "1234567891011.." // Function that returns the N-th character function NthCharacter(n) { // initially null string let s = "" ; // starting integer let c = 1; // add integers in string for (let i = 1;; i++) { // one digit numbers added if (c < 10) s += c.toString(); // more than 1 digit number, generate // equivalent number in a string s1 // and concatenate s1 into s. else { let s1 = "" ; let dup = c; // add the number in string while (dup >0) { s1 += (dup % 10).toString(); dup = Math.floor(dup/10); } // reverse the string s1=s1.split( "" ).reverse().join( "" ); // attach the number s += s1; } c++; // if the length exceeds N if (s.length >= n) { return s[n-1]; } } } // Driver Code let n = 11; document.write( NthCharacter(n)); // This code is contributed by avanitrachhadiya2155 </script> |
Output
0
Complexity Analysis:
- Time Complexity: O(N2), as we are traversing N times using a loop and in each traversal we are using reverse function which will cost O (N), so in the worst case the program will effectively cost O (N*N).
- Auxiliary Space: O(N), as we are using extra space for the string.
Please Login to comment...