📜  大二进制字符串的模

📅  最后修改于: 2022-05-13 01:57:07.189000             🧑  作者: Mango

大二进制字符串的模

给定一个大的二进制字符串str和一个整数K ,任务是找到str % K的值。
例子:

方法:已知(str % K)其中str是一个二进制字符串,可以写成((str[n – 1] * 2 0 ) + (str[n – 2] * 2 1 ) + … + (str [0] * 2 n – 1 )) % K又可以写成(((str[n – 1] * 2 0 ) % K) + ((str[n – 2] * 2 1 ) % K ) + … + ((str[0] * 2 n – 1 )) % K) % K 。这可用于找到所需的答案,而无需将给定的二进制字符串实际转换为其十进制等效值。
下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
 
// Function to return the value of (str % k)
int getMod(string str, int n, int k)
{
 
    // pwrTwo[i] will store ((2^i) % k)
    int pwrTwo[n];
    pwrTwo[0] = 1 % k;
    for (int i = 1; i < n; i++)
    {
        pwrTwo[i] = pwrTwo[i - 1] * (2 % k);
        pwrTwo[i] %= k;
    }
 
    // To store the result
    int res = 0;
    int i = 0, j = n - 1;
    while (i < n)
    {
 
        // If current bit is 1
        if (str[j] == '1')
        {
 
            // Add the current power of 2
            res += (pwrTwo[i]);
            res %= k;
        }
        i++;
        j--;
    }
    return res;
}
 
// Driver code
int main()
{
    string str = "1101";
    int n = str.length();
    int k = 45;
 
    cout << getMod(str, n, k) << endl;
}
 
// This code is contributed by ashutosh450


Java
// Java implementation of the approach
import java.util.*;
 
class GFG {
 
    // Function to return the value of (str % k)
    static int getMod(String str, int n, int k)
    {
 
        // pwrTwo[i] will store ((2^i) % k)
        int pwrTwo[] = new int[n];
        pwrTwo[0] = 1 % k;
        for (int i = 1; i < n; i++) {
            pwrTwo[i] = pwrTwo[i - 1] * (2 % k);
            pwrTwo[i] %= k;
        }
 
        // To store the result
        int res = 0;
        int i = 0, j = n - 1;
        while (i < n) {
 
            // If current bit is 1
            if (str.charAt(j) == '1') {
 
                // Add the current power of 2
                res += (pwrTwo[i]);
                res %= k;
            }
            i++;
            j--;
        }
 
        return res;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String str = "1101";
        int n = str.length();
        int k = 45;
 
        System.out.print(getMod(str, n, k));
    }
}


Python3
# Python3 implementation of the approach
 
# Function to return the value of (str % k)
def getMod(_str, n, k) :
 
    # pwrTwo[i] will store ((2^i) % k)
    pwrTwo = [0] * n
    pwrTwo[0] = 1 % k
    for i in range(1, n):
        pwrTwo[i] = pwrTwo[i - 1] * (2 % k)
        pwrTwo[i] %= k
 
    # To store the result
    res = 0
    i = 0
    j = n - 1
    while (i < n) :
 
        # If current bit is 1
        if (_str[j] == '1') :
 
            # Add the current power of 2
            res += (pwrTwo[i])
            res %= k
             
        i += 1
        j -= 1
 
    return res
 
# Driver code
_str = "1101"
n = len(_str)
k = 45
 
print(getMod(_str, n, k))
 
# This code is contributed by
# divyamohan123


C#
// C# implementation of the above approach
using System;
 
class GFG
{
     
    // Function to return the value of (str % k)
    static int getMod(string str, int n, int k)
    {
        int i;
         
        // pwrTwo[i] will store ((2^i) % k)
        int []pwrTwo = new int[n];
         
        pwrTwo[0] = 1 % k;
         
        for (i = 1; i < n; i++)
        {
            pwrTwo[i] = pwrTwo[i - 1] * (2 % k);
            pwrTwo[i] %= k;
        }
 
        // To store the result
        int res = 0;
        i = 0;
        int j = n - 1;
        while (i < n)
        {
 
            // If current bit is 1
            if (str[j] == '1')
            {
 
                // Add the current power of 2
                res += (pwrTwo[i]);
                res %= k;
            }
            i++;
            j--;
        }
        return res;
    }
 
    // Driver code
    public static void Main()
    {
        string str = "1101";
        int n = str.Length;
        int k = 45;
 
        Console.Write(getMod(str, n, k));
    }
}
 
// This code is contributed by AnkitRai01


Javascript


输出:
13