📌  相关文章
📜  将给定数字四舍五入到10 |的最接近倍数。套装2

📅  最后修改于: 2021-05-04 20:57:32             🧑  作者: Mango

给定一个大的正整数,表示为字符串str 。任务是将此数字四舍五入到最接近的10的倍数。

例子:

方法:本文讨论了针对同一问题的解决方案,该解决方案不适用于大量工作。当数字很大并表示为字符串,我们可以逐位处理数字。主要观察结果是,如果数字的最后一位数字≤5,则只有最后一位数字会受影响,即将其替换为0 。如果是一些大于5,则数量必须四舍五入为10即一些下一较高倍数的最后一位数字将与01来代替将要被添加到数字的其余部分即数表示由子字符串str [0…n-1]可以通过存储每一步(数字)生成的进位来完成。

下面是上述方法的实现:

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


输出:
99999999999999990