Open In App

Convert the number from International system to Indian system

Improve
Improve
Like Article
Like
Save
Share
Report

Given string str which represents a number with separators(,) in the International number system, the task is to convert this string representation into the Indian Numeric System. 
Examples: 

Input: str = “123,456,789” 
Output: 12,34,56,789 
Explanation: 
The given string represents a number in the international system. It is converted to the Indian system. 
Input: str = “90,050,000,000” 
Output: 90,05,00,00,000 

International Numeric System: The International numbering system is used outside the Indian subcontinent to express large numbers. It follows the following schema:

Number Applying separators In words
1 1 One
10 10 Ten
100 100 One hundred
1000 1,000 One thousand
10000 10,000 Ten thousand
100000 100,000 One hundred thousand
1000000 1,000,000 One million
10000000 10,000,000 Ten million
100000000 100,000,000 One hundred million
1000000000 1,000,000,000 One billion

Indian Numeric System: The Indian numbering system is used in the Indian subcontinent to express large numbers. It follows the following schema:

Number Applying separators In words
1 1 One
10 10 Ten
100 100 One hundred
1000 1,000 One thousand
10000 10,000 Ten thousand
100000 1,00,000 One lakh
1000000 10,00,000 Ten lakh
10000000 1,00,00,000 One crore
100000000 10,00,00,000 Ten crore
1000000000 100,00,00,000 One hundred crore

Approach: From the above representations, the idea is to first obtain the number without any separators. Therefore: 

  1. Remove all the separators(, ) from the string.
  2. Process the string.
  3. Now put a separator(, ) after the third number and then after every second number.
  4. Reverse the string (This converts the number into the Indian Numeric System) and print it.

Below is the implementation of the above approach:

C++




// C++ program to convert the number
// from International system
// to Indian system
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to convert a number represented
// in International numeric system to
// Indian numeric system.
string convert(string input)
{
    // Find the length of the
    // input string
    int len = input.length();
 
    // Removing all the separators(, )
    // from the input string
    for (int i = 0; i < len;) {
 
        if (input[i] == ',') {
            input.erase(input.begin() + i);
            len--;
            i--;
        }
        else {
            i++;
        }
    }
 
    // Reverse the input string
    reverse(input.begin(), input.end());
 
    // Declaring the output string
    string output;
 
    // Process the input string
    for (int i = 0; i < len; i++) {
        // Add a separator(,) after the
        // third number
        if (i == 2) {
            output += input[i];
            output += ",";
        }
 
        // Then add a separator(,) after
        // every second number
        else if (i > 2 && i % 2 == 0
                 && i + 1 < len) {
            output += input[i];
            output += ",";
        }
        else {
            output += input[i];
        }
    }
 
    // Reverse the output string
    reverse(output.begin(), output.end());
 
    // Return the output string back
    // to the main function
    return output;
}
 
// Driver code
int main()
{
    string input1 = "123,456,789";
    string input2 = "90,050,000,000";
 
    cout << convert(input1) << endl;
    cout << convert(input2);
}


Java




// Java program to convert the number
// from International system
// to Indian system
import java.util.*;
class GFG{
 
// Function to convert a number represented
// in International numeric system to
// Indian numeric system.
static String convert(String input)
{
    StringBuilder sbInput = new StringBuilder(input);
 
    // Find the length of the
    // sbInput
    int len = sbInput.length();
 
    // Removing all the separators(, )
    // from the sbInput
    for (int i = 0; i < len;)
    {
        if (sbInput.charAt(i) == ',')
        {
            sbInput.deleteCharAt(i);
            len--;
            i--;
        }
        else
        {
            i++;
        }
    }
 
    // Reverse the sbInput
    StringBuilder sbInputReverse = sbInput.reverse();
 
    // Declaring the output
    StringBuilder output = new StringBuilder();
 
    // Process the sbInput
    for (int i = 0; i < len; i++)
    {
 
        // Add a separator(, ) after the
        // third number
        if (i == 2)
        {
            output.append(sbInputReverse.charAt(i));
            output.append(",");
        }
 
        // Then add a separator(, ) after
        // every second number
        else if (i > 2 && i % 2 == 0 && i + 1 < len)
        {
            output.append(sbInputReverse.charAt(i));
            output.append(",");
        }
        else
        {
            output.append(sbInputReverse.charAt(i));
        }
    }
 
    // Reverse the output
    StringBuilder reverseOutput = output.reverse();
 
    // Return the output string back
    // to the main function
    return reverseOutput.toString();
}
 
// Driver code
public static void main(String[] args)
{
    String input1 = "123,456,789";
    String input2 = "90,050,000,000";
 
    System.out.println(convert(input1));
    System.out.println(convert(input2));
}
}
 
// This code is contributed by offbeat


Python3




# Python3 program to convert
# the number from International
# system to Indian system
 
# Function to convert a number
# represented in International
# numeric system to Indian numeric
# system.
def convert(input):
 
    # Find the length of the
    # input string
    Len = len(input)
 
    # Removing all the separators(, )
    # from the input string
    i = 0
    while(i < Len):
        if(input[i] == ","):
            input = input[:i] + input[i + 1:]
            Len -= 1
            i -= 1
        else:
            i += 1
    # Reverse the input string
    input=input[::-1]
 
    # Declaring the output string
    output = ""
 
    # Process the input string
    for i in range(Len):
 
        # Add a separator(, ) after the
        # third number
        if(i == 2):
            output += input[i]
            output += ","
         
        # Then add a separator(, ) after
        # every second number
        elif(i > 2 and i % 2 == 0 and
             i + 1 < Len):
            output += input[i]
            output += ","
        else:
            output += input[i]
     
    # Reverse the output string
    output=output[::-1]
 
    # Return the output string back
    # to the main function
    return output
 
# Driver code
input1 = "123,456,789"
input2 = "90,050,000,000"
print(convert(input1))
print(convert(input2))
 
# This code is contributed by avanitrachhadiya2155


C#




// C# program to convert the number
// from International system
// to Indian system
using System;
using System.Linq;
using System.Text;
using System.Collections.Generic;
 
class GFG {
 
  // Function to convert a number represented
  // in International numeric system to
  // Indian numeric system.
  static string convert(string input)
  {
    StringBuilder sbInput = new StringBuilder(input);
 
    // Find the length of the
    // sbInput
    int len = sbInput.Length;
 
    // Removing all the separators(, )
    // from the sbInput
    for (int i = 0; i < len;) {
      if (sbInput[i] == ',') {
        sbInput.Remove(i, 1);
        len--;
        i--;
      }
      else {
        i++;
      }
    }
 
    // Reverse the sbInput
    StringBuilder sbInputReverse = new StringBuilder();
 
    string st1 = new string(
      sbInput.ToString().Reverse().ToArray());
    sbInputReverse.Append(st1);
 
    // Declaring the output
    StringBuilder output = new StringBuilder();
 
    // Process the sbInput
    for (int i = 0; i < len; i++) {
 
      // Add a separator(,) after the
      // third number
      if (i == 2) {
        output.Append(sbInputReverse[i]);
        output.Append(",");
      }
 
      // Then add a separator(,) after
      // every second number
      else if (i > 2 && i % 2 == 0 && i + 1 < len) {
        output.Append(sbInputReverse[i]);
        output.Append(",");
      }
      else {
        output.Append(sbInputReverse[i]);
      }
    }
 
    // Reverse the output
    StringBuilder reverseOutput = new StringBuilder();
 
    st1 = new string(
      output.ToString().Reverse().ToArray());
    reverseOutput.Append(st1);
 
    // Return the output string back
    // to the main function
    return reverseOutput.ToString();
  }
 
  // Driver code
  public static void Main(string[] args)
  {
    string input1 = "123,456,789";
    string input2 = "90,050,000,000";
 
    Console.WriteLine(convert(input1));
    Console.WriteLine(convert(input2));
  }
}
 
// This code is contributed by phasing17


Javascript




/* JavaScript program to convert the number
from International Numeric System to Indian Numeric System */
 
/* Function to convert a number represented
in International Numeric System to
Indian Numeric System */
function convert(input) {
    // Remove all the separators (, ) from the inputString
    const str = input.replace(/[\s,]+/g, '');
 
    // Declaring empty array
    const arr = [];
    let i = str.length - 1;
 
    /* Traversing through the characters of `str`
    and pushing each character to the array */
    for (let j = str.length - 1; j > i; j--)
        arr.push(str[j]);
 
    // Traversing through the characters of `str`
    for (let j = 0; i >= 0; i--, j++) {
        /* adding comma separator after every
        second character (starting from the third) */
        if (j > 2 && j % 2 == 1) arr.push(',');
 
        // Pushing each character to the array
        arr.push(str[i]);
    };
 
    // Reverse the array, join it and return
    return arr.reverse().join('');
};
 
// Driver code
const input1 = '123,456,789';
const input2 = '90,050,000,000';
const input3 = '48,605,000,000';
 
// Write the converted numbers
console.log(convert(input1));
console.log(convert(input2));
console.log(convert(input3));
 
// This code is contributed by shinjanpatra
 
// This code is improved by Vaibhav Naik


Output

12,34,56,789
90,05,00,00,000






Time Complexity: O(n2), where n is the length of the string
Auxiliary Space: O(1)

Convert the number to Indian System in linear time O(N)

In above solution we had used the .erase() in C++ and .deleteCharAt() in Java, but instead of using that function we can do the same using for loop. So in this method we will remove ‘,’ and ‘ ‘ (extra space) by single for loop so our time complexity will be reduced from O(n2) to O(n).

C++




// C++ program to convert the number from International system to Indian system
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to convert a number represented in International numeric system to Indian numeric system.
string convert(string input)
{
    // Find the length of the input string
    int len = input.length();
 
    // string which store only digit presemt in input string
    string onlyDigits = "";
 
    // store only digit present in input to string onlyDigit
    for (int i = 0; i < len; i++) {
        if (input[i] != ',') {
            onlyDigits += input[i];
        }
    }
 
    // update the length of string
    len = onlyDigits.length();
 
    // Reverse the onlyDigit string
    reverse(onlyDigits.begin(), onlyDigits.end());
 
    // Declaring the output string
    string output = "";
 
    // Process the input string
    for (int i = 0; i < len; i++) {
        // Add a separator(,) after the third number
        if (i == 2) {
            output += onlyDigits[i];
            output += ",";
        }
        // Then add a separator(,) after every second number
        else if (i > 2 && i % 2 == 0 && i + 1 < len) {
            output += onlyDigits[i];
            output += ",";
        }
        else {
            output += onlyDigits[i];
        }
    }
 
    // Reverse the output string
    reverse(output.begin(), output.end());
 
    // Return the output string back to the main function
    return output;
}
 
// Driver code
int main()
{
    string input1 = "123,456,789";
    string input2 = "90,050,000,000";
 
    cout << convert(input1) << endl;
    cout << convert(input2);
}


Java




import java.util.Scanner;
 
public class IndianNumberConversion {
 
    // Function to convert a number represented in International numeric system to Indian numeric system.
    static String convert(String input) {
        // Find the length of the input string
        int len = input.length();
 
        // string which stores only digits present in the input string
        StringBuilder onlyDigits = new StringBuilder();
 
        // store only digits present in the input to the StringBuilder onlyDigits
        for (int i = 0; i < len; i++) {
            if (input.charAt(i) != ',') {
                onlyDigits.append(input.charAt(i));
            }
        }
 
        // update the length of the string
        len = onlyDigits.length();
 
        // Reverse the onlyDigits string
        onlyDigits.reverse();
 
        // Declaring the output string
        StringBuilder output = new StringBuilder();
 
        // Process the input string
        for (int i = 0; i < len; i++) {
            // Add a separator(,) after the third number
            if (i == 2) {
                output.append(onlyDigits.charAt(i)).append(",");
            }
            // Then add a separator(,) after every second number
            else if (i > 2 && i % 2 == 0 && i + 1 < len) {
                output.append(onlyDigits.charAt(i)).append(",");
            } else {
                output.append(onlyDigits.charAt(i));
            }
        }
 
        // Reverse the output string
        output.reverse();
 
        // Return the output string back to the main function
        return output.toString();
    }
 
    // Driver code
    public static void main(String[] args) {
        String input1 = "123,456,789";
        String input2 = "90,050,000,000";
 
        System.out.println(convert(input1));
        System.out.println(convert(input2));
    }
}


Python3




def convert(input_str):
    # Find the length of the input string
    length = len(input_str)
 
    # String to store only digits present in the input string
    only_digits = ""
 
    # Store only digits present in the input to the only_digits string
    for i in range(length):
        if input_str[i] != ',':
            only_digits += input_str[i]
 
    # Update the length of the string
    length = len(only_digits)
 
    # Reverse the only_digits string
    only_digits = only_digits[::-1]
 
    # Declare the output string
    output = ""
 
    # Process the input string
    for i in range(length):
        # Add a separator (,) after the third number
        if i == 2:
            output += only_digits[i] + ","
        # Then add a separator (,) after every second number
        elif i > 2 and i % 2 == 0 and i + 1 < length:
            output += only_digits[i] + ","
        else:
            output += only_digits[i]
 
    # Reverse the output string
    output = output[::-1]
 
    # Return the output string back to the calling function
    return output
 
# Driver code
if __name__ == "__main__":
    input1 = "123,456,789"
    input2 = "90,050,000,000"
 
    print(convert(input1))
    print(convert(input2))


C#




using System;
 
class Program
{
    // Function to convert the input string based on specific rules
    static string Convert(string inputStr)
    {
        // Find the length of the input string
        int length = inputStr.Length;
        string onlyDigits = "";
 
        // Extract digits from the input string
        for (int i = 0; i < length; i++)
        {
            if (inputStr[i] != ',')
            {
                onlyDigits += inputStr[i];
            }
        }
 
        // Update the length after removing commas
        length = onlyDigits.Length;
 
        // Reverse the string containing only digits
        char[] charArray = onlyDigits.ToCharArray();
        Array.Reverse(charArray);
        onlyDigits = new string(charArray);
 
        string output = "";
 
        // Process the string to apply formatting rules
        for (int i = 0; i < length; i++)
        {
            // Add a separator (,) after the third number
            if (i == 2)
            {
                output += onlyDigits[i] + ",";
            }
            // Add a separator (,) after every second number beyond the third
            else if (i > 2 && i % 2 == 0 && i + 1 < length)
            {
                output += onlyDigits[i] + ",";
            }
            else
            {
                output += onlyDigits[i];
            }
        }
 
        // Reverse the output string
        charArray = output.ToCharArray();
        Array.Reverse(charArray);
        output = new string(charArray);
 
        return output;
    }
 
    // Entry point of the program
    static void Main(string[] args)
    {
        // Input strings
        string input1 = "123,456,789";
        string input2 = "90,050,000,000";
 
        // Output converted strings
        Console.WriteLine(Convert(input1));
        Console.WriteLine(Convert(input2));
    }
}


Javascript




function convert(input) {
    // Find the length of the input string
    let len = input.length;
 
    // String to store only digits present in input
    let onlyDigits = "";
 
    // Store only digits present in input to onlyDigits string
    for (let i = 0; i < len; i++) {
        if (input[i] !== ',') {
            onlyDigits += input[i];
        }
    }
 
    // Update the length of the string
    len = onlyDigits.length;
 
    // Reverse the onlyDigits string
    onlyDigits = onlyDigits.split('').reverse().join('');
 
    // Initialize the output string
    let output = "";
 
    // Process the input string
    for (let i = 0; i < len; i++) {
        // Add a separator(,) after the third number
        if (i === 2) {
            output += onlyDigits[i] + ",";
        }
        // Then add a separator(,) after every second number
        else if (i > 2 && i % 2 === 0 && i + 1 < len) {
            output += onlyDigits[i] + ",";
        } else {
            output += onlyDigits[i];
        }
    }
 
    // Reverse the output string
    output = output.split('').reverse().join('');
 
    // Return the output string
    return output;
}
 
// Driver code
let input1 = "123,456,789";
let input2 = "90,050,000,000";
 
console.log(convert(input1)); // Output for input1
console.log(convert(input2)); // Output for input2


Output

12,34,56,789
90,05,00,00,000






Time Complexity: O(n), where n is the length of string
Auxiliary Space: O(1)



Last Updated : 20 Dec, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads