在java中写一个函数求一个正整数N的二进制周期
write a function in java to find the binary period of a positive integer N
给出一个由Q个字符组成的非空零索引字符串S。这个字符串的周期是最小的
正整数 P 使得:
P≤Q/2 和
S[K] = S[K+P] 对于 0 ≤ K < Q − P.
例如,7是“pepsicopepsicopep”的句号。
如果M是N的二进制表示的周期,则正整数M是正整数N的二进制周期
例如,1651 的二进制表示为“110011100111”。因此,它的二进制周期为5。另一方面,102没有二进制周期,因为它的二进制表示是“1100110”,它没有周期
考虑上述情况并在 Java 中编写一个函数,它将接受一个整数 N 作为参数。给定一个正整数 N,函数 return 是 N 的二进制周期。如果 N 没有二进制周期,函数应该 return −1。
下面我也包含了我为它工作的解决方案,我想知道是否有其他更好的方法来解决它?
public class BinaryPeriod {
public static void main(String[] args) {
System.out.println("\nEx1: " + getBinaryPeriodForInt(102));
System.out.println("\nEx2: " + getBinaryPeriodForInt(1651));
}
static int getBinaryPeriodForInt(int n) {
int[] d = new int[30];
int l = 0, res = -1;
while (n > 0) {
d[l] = n % 2;
n /= 2;
l++;
}
for (int p = 1; p < l; p++) {
if (p <= l / 2) {
boolean ok = true;
for (int i = 0; i < l - p; i++) {
if (d[i] != d[i + p]) {
ok = false;
break;
}
}
if (ok) {
res = p;
}
}
}
return res;
}
}
给出一个由Q个字符组成的非空零索引字符串S。这个字符串的周期是最小的
正整数 P 使得:
P≤Q/2 和 S[K] = S[K+P] 对于 0 ≤ K < Q − P.
例如,7是“pepsicopepsicopep”的句号。 如果M是N的二进制表示的周期,则正整数M是正整数N的二进制周期
例如,1651 的二进制表示为“110011100111”。因此,它的二进制周期为5。另一方面,102没有二进制周期,因为它的二进制表示是“1100110”,它没有周期
考虑上述情况并在 Java 中编写一个函数,它将接受一个整数 N 作为参数。给定一个正整数 N,函数 return 是 N 的二进制周期。如果 N 没有二进制周期,函数应该 return −1。
下面我也包含了我为它工作的解决方案,我想知道是否有其他更好的方法来解决它?
public class BinaryPeriod {
public static void main(String[] args) {
System.out.println("\nEx1: " + getBinaryPeriodForInt(102));
System.out.println("\nEx2: " + getBinaryPeriodForInt(1651));
}
static int getBinaryPeriodForInt(int n) {
int[] d = new int[30];
int l = 0, res = -1;
while (n > 0) {
d[l] = n % 2;
n /= 2;
l++;
}
for (int p = 1; p < l; p++) {
if (p <= l / 2) {
boolean ok = true;
for (int i = 0; i < l - p; i++) {
if (d[i] != d[i + p]) {
ok = false;
break;
}
}
if (ok) {
res = p;
}
}
}
return res;
}
}