算法通关村第十三关|青铜|数字与数学基础问题

1.数字统计专题

1.1 符号统计

原题:力扣1822.

只需要看有多少个负数,就足以判断符号了。

public int arraySign(int[] nums) {
	int prod = 1;
    for (int i = 0; i < nums.length; i++) {
        if (nums[i] == 0) {
            return 0;
        } else if (nums[i] < 0) {
            prod = -prod;
        }
    }
    return prod;
}

1.2 阶乘0的个数

原题:力扣 面试题 16.05.

public int trailingZeroes(int n) {
	int cnt = 0;
	for (long num = 5; n / num > 0; num *= 5) {
        cnt += n / num;
    }
	return cnt;
}

2.溢出问题

2.1 整数反转

public int reverse(int x) {
	int res = 0;
	while (x != 0) {
        if (res < Integer.MIN_VALUE / 10 || rev > Integer.MAX_VALUE / 10) {
            return 0;
        }
        int digit = x % 10;
        x /= 10;
        rev = rev * 10 + digit;
    }
	return rev;
}

2.2 字符串转整数

见第十二关青铜挑战:字符串转换整数

2.3 回文数

这道题将一半的字符进行反转然后比较,可以避免溢出的问题。

public boolean isPalindrome(int x) {
	if (x < 0 || (x % 10 == 0 && x != 0)) {
        return false;
	}
	int revertedNumber = 0;
	while (x > revertedNumber) {
        revertedNumber = revertedNumber * 10 + x % 10;
        x /= 10;
    }
	return x == revertedNumber || x == revertedNumber / 10;
}

3.进制问题

3.1 七进制数

原题:力扣504.

public String convertToBase7(int num) {
	StringBuilder sb = new StringBuilder();
	boolean sign = num < 0;
	if (sign) {
        num *= -1;
    }
	do {
        sb.append(num % 7 + "");
        num /= 7;
    } while (num > 0);
	if (sign) {
        sb.append("-");
    }
	return sb.reverse().toString();
}

3.2 进制转换

给定一个十进制数M,以及需要转换的进制数N,将十进制数M转化为N进制数。M是32位整数,2<=N<=16。

三大措施:

  1. 定义大小为 16 的数组 F ,保存的是 2 到 16 的各个进制的值对应的标记,赋值时只计算下标。
  2. 使用 StringBuilder 完成数组转置功能。
  3. 通过一个 flag 来判断正负性,最后处理。
public static final String[] F = {"0", "1", "2","3", "4", "5", "6", "7", "8","9", "A", "B", "C", "D", "E", "F"};
public String convert(int M, int N) {
	Boolean flag = false;
    if (M < 0) {
        flag = true;
        M *= -1;
    }
    StringBuilder sb = new StringBuilder();
    int temp;
    while (M != 0) {
        temp = M % N;
        sb.append(F[temp]);
        M = M / N;
    }
    sb.reverse();
    return (flag ? "-" : "") + sb.toString();
}

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤

你可能感兴趣的:(不易,算法通关村,算法,java,算法通关村)