给定一个八进制数N ,任务是将数字转换为十进制数,然后以2的幂为单位找到模,即2 i ,使得i> 0且2 i
例子:
Input: N = 13
Output: 2
Octal(13) = decimal(11)
11 % 2 = 1
11 % 4 = 3
11 % 8 = 3
3 occurs the most i.e. 2 times.
Input: N = 21
Output: 4
方法:通过用数字的二进制表示代替数字来找到数字的二进制表示。现在已知二进制表示中的每个数字都以2的幂递增顺序表示。因此,具有2的幂的数字的模是由其前面的位的二进制表示形式形成的数字。例如,
Octal(13) = decimal(11) = binary(1011)
So,
11(1011) % 2 (10) = 1 (1)
11(1011) % 4 (100) = 3 (11)
11(1011) % 8 (1000) = 3 (011)
在此可以看出,当模的二进制表示形式为零时,数量保持不变。因此,模的最大频率将为1 +数字的二进制表示形式中连续0的数量(而不是前导零)。随着模数从2开始,请删除数字的LSB。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Binary representation of the digits
const string bin[] = { "000", "001", "010", "011",
"100", "101", "110", "111" };
// Function to return the maximum frequency
// of s modulo with a power of 2
int maxFreq(string s)
{
// Store the binary representation
string binary = "";
// Convert the octal to binary
for (int i = 0; i < s.length(); i++) {
binary += bin[s[i] - '0'];
}
// Remove the LSB
binary = binary.substr(0, binary.length() - 1);
int count = 1, prev = -1, i, j = 0;
for (i = binary.length() - 1; i >= 0; i--, j++)
// If there is 1 in the binary representation
if (binary[i] == '1') {
// Find the number of zeroes in between
// two 1's in the binary representation
count = max(count, j - prev);
prev = j;
}
return count;
}
// Driver code
int main()
{
string octal = "13";
cout << maxFreq(octal);
return 0;
}
Java
// Java implementation of the approach
class GFG
{
// Binary representation of the digits
static String bin[] = { "000", "001", "010", "011",
"100", "101", "110", "111" };
// Function to return the maximum frequency
// of s modulo with a power of 2
static int maxFreq(String s)
{
// Store the binary representation
String binary = "";
// Convert the octal to binary
for (int i = 0; i < s.length(); i++)
{
binary += bin[s.charAt(i) - '0'];
}
// Remove the LSB
binary = binary.substring(0,
binary.length() - 1);
int count = 1, prev = -1, i, j = 0;
for (i = binary.length() - 1;
i >= 0; i--, j++)
// If there is 1 in the binary representation
if (binary.charAt(i) == '1')
{
// Find the number of zeroes in between
// two 1's in the binary representation
count = Math.max(count, j - prev);
prev = j;
}
return count;
}
// Driver code
public static void main(String []args)
{
String octal = "13";
System.out.println(maxFreq(octal));
}
}
// This code is contributed by 29AjayKumar
Python3
# Python3 implementation of the approach
# Binary representation of the digits
bin = [ "000", "001", "010", "011",
"100", "101", "110", "111" ];
# Function to return the maximum frequency
# of s modulo with a power of 2
def maxFreq(s) :
# Store the binary representation
binary = "";
# Convert the octal to binary
for i in range(len(s)) :
binary += bin[ord(s[i]) - ord('0')];
# Remove the LSB
binary = binary[0 : len(binary) - 1];
count = 1; prev = -1;j = 0;
for i in range(len(binary) - 1, -1, -1) :
# If there is 1 in the binary representation
if (binary[i] == '1') :
# Find the number of zeroes in between
# two 1's in the binary representation
count = max(count, j - prev);
prev = j;
j += 1;
return count;
# Driver code
if __name__ == "__main__" :
octal = "13";
print(maxFreq(octal));
# This code is contributed by AnkitRai01
C#
// C# implementation of the approach
using System;
class GFG
{
// Binary representation of the digits
static String []bin = { "000", "001", "010", "011",
"100", "101", "110", "111" };
// Function to return the maximum frequency
// of s modulo with a power of 2
static int maxFreq(String s)
{
// Store the binary representation
String binary = "";
// Convert the octal to binary
for (int K = 0; K < s.Length; K++)
{
binary += bin[s[K] - '0'];
}
// Remove the LSB
binary = binary.Substring(0,
binary.Length - 1);
int count = 1, prev = -1, i, j = 0;
for (i = binary.Length - 1;
i >= 0; i--, j++)
// If there is 1 in the binary representation
if (binary[i] == '1')
{
// Find the number of zeroes in between
// two 1's in the binary representation
count = Math.Max(count, j - prev);
prev = j;
}
return count;
}
// Driver code
public static void Main(String []args)
{
String octal = "13";
Console.WriteLine(maxFreq(octal));
}
}
// This code is contributed by 29AjayKumar
输出:
2