Operación de bits (abajo)

Diario de novatos-21 de enero

Caso numero uno

Representa números de punto flotante en binario

La premisa es tener una precisión de 32 bits; de lo contrario, se informará un error

Tales como: 0.625

public class 二进制表示浮点数 {
    
    
    public static void main(String[] args) {
    
    
        double num = 0.625;
        StringBuilder sb = new StringBuilder("0.");
        while (num > 0){
    
    
            //乘2挪整
            double q = num * 2;
            if (q >= 1){
    
    
                sb.append("1");
                num = q - 1;
            }
            else {
    
    
                sb.append("0");
                num = q;
            }
        }
        if (sb.length() > 34){
    
    
            System.out.println("ERROR");
            return;
        }
        System.out.println(sb.toString());
    }
}

Diagrama:
Inserte la descripción de la imagen aquí

Imagen de efecto:
Inserte la descripción de la imagen aquí

Caso 2:

K ocurrencias y 1 ocurrencia

En una matriz de números, un número aparece una vez y otros números aparecen k veces, encuentre el número que aparece una vez (sin espacio auxiliar)

1. Primero construye una matriz bidimensional

public class 出现k次 {
    
    
    public static void main(String[] args) {
    
    
        int[] arr = {
    
    3,3,3,5,5,5,15,9,9,9,11,11,11};
        int len = arr.length;
        char [] [] kRadix = new char[len][];
        int k = 3;
        int maxLen = 0;

2. Convierta cada número en una matriz de caracteres en base k

for (int i = 0; i < len; i++) {
    
    
			//先转换为k进制的数组,再反转并转换为字符数组
            kRadix[i] = new StringBuilder(Integer.toString(arr[i], k)).reverse().toString().toCharArray();
            maxLen表示最长的k进制长度
            //如9三进制为100有三位,4为11有两位
            if (kRadix[i].length > maxLen)
                maxLen = kRadix[i].length;
        }

3. Agregar sin llevar

int[] reaArr = new int[maxLen];
        for (int i = 0; i < len; i++) {
    
    
            for (int j = 0; j < maxLen; j++) {
    
    
                //补位,不足maxLen位则用0补齐
                if (j >= kRadix[i].length) {
    
    
                    reaArr[j] += 0;
                }
                else {
    
    
                    //字符转换为整数数字
                    reaArr[j] += (kRadix[i][j] - '0');
                }
            }
        }

4. Elimina otros números

int res = 0;
        for (int j = 0; j < maxLen; j++) {
    
    
            //每一列的和除以k,然后乘以k的i次方,并相加
            //除了出现一次那个数的各位数的列的和,其他的都会因除以k而被消掉
            res += (reaArr[j] % k) * (int) (Math.pow(k,j));
        }
        System.out.println(res);
    }
}

Diagrama:
Inserte la descripción de la imagen aquí

Imagen de efecto:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/ghl971/article/details/112938464
Recomendado
Clasificación