# Round the given number to nearest multiple of 10 | Set-2

Given a large positive integer represented as a string str. The task is to round this number to the nearest multiple of 10.

Examples:

Input: str = “99999999999999993”
Output: 99999999999999990

Input: str = “99999999999999996”
Output: 100000000000000000

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Approach: A solution to the same problem has been discussed in this article which will not work for large numbers. When the number is large and represented as strings we can process the number digit by digit. The main observation is that if the last digit of the number is ≤ 5 then only the last digit will get affected i.e. it will be replaced with a 0. If it is something greater then 5 then the number has to be rounded to some next higher multiple of 10 i.e. the last digit will be replaced with a 0 and 1 will have to be added to the rest of the number i.e. the number represented by the sub-string str[0…n-1] which can be done by storing carry generated at every step (digit).

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to round the given number ` `// to the nearest multiple of 10 ` `void` `roundToNearest(string str, ``int` `n) ` `{ ` ` `  `    ``// If string is empty ` `    ``if` `(str == ``""``) ` `        ``return``; ` ` `  `    ``// If the last digit is less then or equal to 5 ` `    ``// then it can be rounded to the nearest ` `    ``// (previous) multiple of 10 by just replacing ` `    ``// the last digit with 0 ` `    ``if` `(str[n - 1] - ``'0'` `<= 5) { ` ` `  `        ``// Set the last digit to 0 ` `        ``str[n - 1] = ``'0'``; ` ` `  `        ``// Print the updated number ` `        ``cout << str.substr(0, n); ` `    ``} ` ` `  `    ``// The number hast to be rounded to ` `    ``// the next multiple of 10 ` `    ``else` `{ ` ` `  `        ``// To store the carry ` `        ``int` `carry = 0; ` ` `  `        ``// Replace the last digit with 0 ` `        ``str[n - 1] = ``'0'``; ` ` `  `        ``// Starting from the second last digit, add 1 ` `        ``// to digits while there is carry ` `        ``int` `i = n - 2; ` `        ``carry = 1; ` ` `  `        ``// While there are digits to consider ` `        ``// and there is carry to add ` `        ``while` `(i >= 0 && carry == 1) { ` ` `  `            ``// Get the current digit ` `            ``int` `currentDigit = str[i] - ``'0'``; ` ` `  `            ``// Add the carry ` `            ``currentDigit += carry; ` ` `  `            ``// If the digit exceeds 9 then ` `            ``// the carry will be generated ` `            ``if` `(currentDigit > 9) { ` `                ``carry = 1; ` `                ``currentDigit = 0; ` `            ``} ` ` `  `            ``// Else there will be no carry ` `            ``else` `                ``carry = 0; ` ` `  `            ``// Update the current digit ` `            ``str[i] = (``char``)(currentDigit + ``'0'``); ` ` `  `            ``// Get to the previous digit ` `            ``i--; ` `        ``} ` ` `  `        ``// If the carry is still 1 then it must be ` `        ``// inserted at the beginning of the string ` `        ``if` `(carry == 1) ` `            ``cout << carry; ` ` `  `        ``// Prin the rest of the number ` `        ``cout << str.substr(0, n); ` `    ``} ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``string str = ``"99999999999999993"``; ` `    ``int` `n = str.length(); ` ` `  `    ``roundToNearest(str, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java implementation of the approach  ` `class` `GFG  ` `{ ` ` `  `// Function to round the given number ` `// to the nearest multiple of 10 ` `static` `void` `roundToNearest(StringBuilder str, ``int` `n)  ` `{ ` ` `  `    ``// If string is empty ` `    ``if` `(str.toString() == ``""``) ` `        ``return``; ` ` `  `    ``// If the last digit is less then or equal to 5 ` `    ``// then it can be rounded to the nearest ` `    ``// (previous) multiple of 10 by just replacing ` `    ``// the last digit with 0 ` `    ``if` `(str.charAt(n - ``1``) - ``'0'` `<= ``5``) ` `    ``{ ` ` `  `        ``// Set the last digit to 0 ` `        ``str.setCharAt(n - ``1``, ``'0'``); ` ` `  `        ``// Print the updated number ` `        ``System.out.print(str.substring(``0``, n)); ` `    ``} ` ` `  `    ``// The number hast to be rounded to ` `    ``// the next multiple of 10 ` `    ``else`  `    ``{ ` ` `  `        ``// To store the carry ` `        ``int` `carry = ``0``; ` ` `  `        ``// Replace the last digit with 0 ` `        ``str.setCharAt(n - ``1``, ``'0'``); ` ` `  `        ``// Starting from the second last digit,  ` `        ``// add 1 to digits while there is carry ` `        ``int` `i = n - ``2``; ` `        ``carry = ``1``; ` ` `  `        ``// While there are digits to consider ` `        ``// and there is carry to add ` `        ``while` `(i >= ``0` `&& carry == ``1``) ` `        ``{ ` ` `  `            ``// Get the current digit ` `            ``int` `currentDigit = str.charAt(i) - ``'0'``; ` ` `  `            ``// Add the carry ` `            ``currentDigit += carry; ` ` `  `            ``// If the digit exceeds 9 then ` `            ``// the carry will be generated ` `            ``if` `(currentDigit > ``9``)  ` `            ``{ ` `                ``carry = ``1``; ` `                ``currentDigit = ``0``; ` `            ``} ` ` `  `            ``// Else there will be no carry ` `            ``else` `                ``carry = ``0``; ` ` `  `            ``// Update the current digit ` `            ``str.setCharAt(i, (``char``)(currentDigit + ``'0'``)); ` ` `  `            ``// Get to the previous digit ` `            ``i--; ` `        ``} ` ` `  `        ``// If the carry is still 1 then it must be ` `        ``// inserted at the beginning of the string ` `        ``if` `(carry == ``1``) ` `            ``System.out.print(carry); ` ` `  `        ``// Prin the rest of the number ` `        ``System.out.print(str.substring(``0``, n)); ` `    ``} ` `} ` ` `  `// Driver code ` `public` `static` `void` `main(String[] args)  ` `{ ` `    ``StringBuilder str = ``new` `StringBuilder(``"99999999999999993"``); ` `    ``int` `n = str.length(); ` `    ``roundToNearest(str, n); ` `} ` `} ` ` `  `// This code is contributed by ` `// sanjeev2552 `

## Python3

 `# Python 3 implementation of the approach ` ` `  `# Function to round the given number ` `# to the nearest multiple of 10 ` `def` `roundToNearest(``str``, n): ` `     `  `    ``# If string is empty ` `    ``if` `(``str` `=``=` `""): ` `        ``return` ` `  `    ``# If the last digit is less then or equal to 5 ` `    ``# then it can be rounded to the nearest ` `    ``# (previous) multiple of 10 by just replacing ` `    ``# the last digit with 0 ` `    ``if` `(``ord``(``str``[n ``-` `1``]) ``-` `ord``(``'0'``) <``=` `5``): ` `         `  `        ``# Set the last digit to 0 ` `        ``str` `=` `list``(``str``) ` `        ``str``[n ``-` `1``] ``=` `'0'` `        ``str` `=` `''.join(``str``) ` ` `  `        ``# Print the updated number ` `        ``print``(``str``[``0``:n]) ` ` `  `    ``# The number hast to be rounded to ` `    ``# the next multiple of 10 ` `    ``else``: ` `         `  `        ``# To store the carry ` `        ``carry ``=` `0` ` `  `        ``# Replace the last digit with 0 ` `        ``str` `=` `list``(``str``) ` `        ``str``[n ``-` `1``] ``=` `'0'` ` `  `        ``str` `=` `''.join(``str``) ` ` `  `        ``# Starting from the second last digit,  ` `        ``# add 1 to digits while there is carry ` `        ``i ``=` `n ``-` `2` `        ``carry ``=` `1` ` `  `        ``# While there are digits to consider ` `        ``# and there is carry to add ` `        ``while` `(i >``=` `0` `and` `carry ``=``=` `1``): ` `             `  `            ``# Get the current digit ` `            ``currentDigit ``=` `ord``(``str``[i]) ``-` `ord``(``'0'``) ` ` `  `            ``# Add the carry ` `            ``currentDigit ``+``=` `carry ` ` `  `            ``# If the digit exceeds 9 then ` `            ``# the carry will be generated ` `            ``if` `(currentDigit > ``9``): ` `                ``carry ``=` `1` `                ``currentDigit ``=` `0` ` `  `            ``# Else there will be no carry ` `            ``else``: ` `                ``carry ``=` `0` ` `  `            ``# Update the current digit ` `            ``str``[i] ``=` `chr``(currentDigit ``+` `'0'``) ` ` `  `            ``# Get to the previous digit ` `            ``i ``-``=` `1` ` `  `        ``# If the carry is still 1 then it must be ` `        ``# inserted at the beginning of the string ` `        ``if` `(carry ``=``=` `1``): ` `            ``print``(carry) ` ` `  `        ``# Prin the rest of the number ` `        ``print``(``str``[``0``:n]) ` `     `  `# Driver code ` `if` `__name__ ``=``=` `'__main__'``: ` `    ``str` `=` `"99999999999999993"` `    ``n ``=` `len``(``str``) ` ` `  `    ``roundToNearest(``str``, n) ` ` `  `# This code is contributed by ` `# Surendra_Gangwar `

## C#

 `// C# implementation of the approach  ` `using` `System; ` `using` `System.Text; ` ` `  `class` `GFG  ` `{  ` ` `  `// Function to round the given number  ` `// to the nearest multiple of 10  ` `static` `void` `roundToNearest(StringBuilder str, ``int` `n)  ` `{  ` ` `  `    ``// If string is empty  ` `    ``if` `(str.ToString() == ``""``)  ` `        ``return``;  ` ` `  `    ``// If the last digit is less then or equal to 5  ` `    ``// then it can be rounded to the nearest  ` `    ``// (previous) multiple of 10 by just replacing  ` `    ``// the last digit with 0  ` `    ``if` `(str[n - 1] - ``'0'` `<= 5)  ` `    ``{  ` ` `  `        ``// Set the last digit to 0  ` `        ``str[n - 1] = ``'0'``;  ` ` `  `        ``// Print the updated number  ` `        ``Console.Write(str.ToString().Substring(0, n));  ` `    ``}  ` ` `  `    ``// The number hast to be rounded to  ` `    ``// the next multiple of 10  ` `    ``else` `    ``{  ` ` `  `        ``// To store the carry  ` `        ``int` `carry = 0;  ` ` `  `        ``// Replace the last digit with 0  ` `        ``str[n - 1] = ``'0'``;  ` ` `  `        ``// Starting from the second last digit,  ` `        ``// add 1 to digits while there is carry  ` `        ``int` `i = n - 2;  ` `        ``carry = 1;  ` ` `  `        ``// While there are digits to consider  ` `        ``// and there is carry to add  ` `        ``while` `(i >= 0 && carry == 1)  ` `        ``{  ` ` `  `            ``// Get the current digit  ` `            ``int` `currentDigit = str[i] - ``'0'``;  ` ` `  `            ``// Add the carry  ` `            ``currentDigit += carry;  ` ` `  `            ``// If the digit exceeds 9 then  ` `            ``// the carry will be generated  ` `            ``if` `(currentDigit > 9)  ` `            ``{  ` `                ``carry = 1;  ` `                ``currentDigit = 0;  ` `            ``}  ` ` `  `            ``// Else there will be no carry  ` `            ``else` `                ``carry = 0;  ` ` `  `            ``// Update the current digit  ` `            ``str[i] = (``char``)(currentDigit + ``'0'``);  ` ` `  `            ``// Get to the previous digit  ` `            ``i--;  ` `        ``}  ` ` `  `        ``// If the carry is still 1 then it must be  ` `        ``// inserted at the beginning of the string  ` `        ``if` `(carry == 1)  ` `            ``Console.Write(carry);  ` ` `  `        ``// Prin the rest of the number  ` `        ``Console.Write(str.ToString().Substring(0, n));  ` `    ``}  ` `}  ` ` `  `// Driver code  ` `public` `static` `void` `Main(String[] args)  ` `{  ` `    ``StringBuilder str = ``new` `StringBuilder(``"99999999999999993"``);  ` `    ``int` `n = str.Length;  ` `    ``roundToNearest(str, n);  ` `}  ` `}  ` ` `  `// This code is contributed by  ` `// Rajnis09 `

Output:

```99999999999999990
```

Don’t stop now and take your learning to the next level. Learn all the important concepts of Data Structures and Algorithms with the help of the most trusted course: DSA Self Paced. Become industry ready at a student-friendly price.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Article Tags :
Practice Tags :

3

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