算法通关村第13关【青铜】| 数字与数学基础问题

news2024/11/23 7:47:33

数字统计专题

1.数组元素积的符号

思路:每回碰到负数就取反

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

 2.阶乘尾数

思路:15!= 1*2*3*4*5*6*7*8*9*(2*5)11*12*13*14*15

可以发现2的因子是肯定会比5的因子多,而只要拆分中出现2*5=10结果就会多一个0,所以问题就转换为求出有多少个为5的因子

class Solution {
    public int trailingZeroes(int n) {
        int count = 0;
        int num = 5;
        while(n>=num){
            count += n/num;
            n = n/5;
        }
        return count;
    }
}

溢出问题

1.整数反转

思路:反转方法有使用栈、字符串转整数、取模,这里使用取模更好

判断溢出的方法:max/10>num

class Solution {
    public int reverse(int x) {
        int res = 0;
        int max = Integer.MAX_VALUE;
        while(x != 0){
            int t = x%10;
            System.out.print(t);
            if(res>max/10||res == max/10 && t >7){
                return 0;
            }
            if(res<-max/10||res == max/10 && t <=-8){
                return 0;
            }
            res = res*10 + t;
            x=x/10;
        }
        return res;
    }
}

 2.回文数

思路:判断回文方法双指针、截取一半比较

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

进制问题

1.七进制数

思路:

  1. 二进制到十进制

    • 二进制数每一位的权值为2的幂,从右往左依次是1、2、4、8、16...
    • 将二进制数的每一位与对应权值相乘,然后求和即可得到十进制数。

    例如,二进制数1011转换为十进制:(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 8 + 0 + 2 + 1 = 11。

  2. 八进制到十进制

    • 八进制数每一位的权值为8的幂,从右往左依次是1、8、64、512...
    • 将八进制数的每一位与对应权值相乘,然后求和即可得到十进制数。
  3. 十六进制到十进制

    • 十六进制数每一位的权值为16的幂,从右往左依次是1、16、256、4096...
    • 将十六进制数的每一位与对应权值相乘,然后求和即可得到十进制数。需要注意的是,十六进制中的A表示10,B表示11,C表示12,D表示13,E表示14,F表示15。
  4. 十进制到其他进制

    • 将十进制数不断除以目标进制的基数,取余数作为新进制数的一位,直到商为0。
    • 反转余数的顺序,即可得到目标进制数。

    例如,将十进制数231转换为二进制:

    • 231 / 2 = 115 余 1
    • 115 / 2 = 57 余 1
    • 57 / 2 = 28 余 1
    • 28 / 2 = 14 余 0
    • 14 / 2 = 7 余 0
    • 7 / 2 = 3 余 1
    • 3 / 2 = 1 余 1
    • 1 / 2 = 0 余 1

    反转余数的顺序为 11100111,即231的二进制表示。

  5. 其他进制到其他进制

    • 可以通过先将原数转换为十进制,然后再从十进制转换为目标进制来实现。
class Solution {
    public String convertToBase7(int num) {
        StringBuilder sb = new StringBuilder();
        int sign = num<0 ? 1 : 0;
        if(num < 0){
            num = -num;
        }
        do{
            sb.append(num%7);
            num = num /7;
        }while(num>0);
        if(sign == 1){
            sb.append("-");
        }
        return sb.reverse().toString();
    }
}

 2.转换为N机制

public static String convert(int M, int N) {
        Boolean flag = false;
        if (M < 0) {
            flag = true;
            M *= -1;
        }
        StringBuffer sb = new StringBuffer();
        int temp;
        while (M != 0) {
            temp = M % N;
            //技巧一:通过数组F[]解决了大量繁琐的不同进制之间映射的问题
            sb.append(F[temp]);
            M = M / N;
        }
        //技巧二:使用StringBuffer的reverse()方法,让原本麻烦的转置瞬间美好
        sb.reverse();
        //技巧三:最后处理正负,不要从一开始就揉在一起。
        return (flag ? "-" : "") + sb.toString();
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1003523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基本认识

一、Linux基本概念 Linux 内核最初只是由芬兰人林纳斯托瓦兹&#xff08;Linus Torvalds&#xff09;在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统&#xff0c;是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多…

地下管网实时水位监测用什么设备好?

地下排水管网是城市重要基础设施生命线之一&#xff0c;主要用于排放雨水、地表水和废水&#xff0c;以维护城市的安全运行。然而&#xff0c;在极端天气事件发生时&#xff0c;排水系统可能会面临压力巨大&#xff0c;导致排水不畅引发城市内涝。通过对管网水位实时监测&#…

Java集合大总结——Collection集合

Collection集合的整理 1、List&#xff0c;Set&#xff0c;Queue&#xff0c;Map四者的区别集合底层数据结构梳理2、关于集合的的选用2.1 为什么使用集合3、List接口3.1 ArrayList 和 Array&#xff08;数组&#xff09;的区别&#xff1f;3.1 LinkedList 为什么不能实现Random…

基于python+txt的学生成绩管理系统

基于pythontxt的学生成绩管理系统 一、系统介绍二、效果展示三、其他系统实现四、获取源码 一、系统介绍 录入学生信息查找学生信息删除学生信息修改学生信息排序统计学生信息显示所有学生信息 基于python的学生成绩管理系统&#xff0c;具备基本的增删改查功能&#xff0c;包…

2023-9-12 完全背包问题

题目链接&#xff1a;完全背包问题 初版(时间复杂度拉满) #include <iostream> #include <algorithm>using namespace std;const int N 1010;int n, m; int v[N], w[N]; int f[N][N];int main() {cin >> n >> m;for(int i 1; i < n; i ) cin >…

AntDB数据库参加ACDU中国行杭州站,分享数据库运维实践与经验

关于ACDU 和中国行: ACDU是由墨天轮社区举办的中国数据库联盟的品牌活动之一&#xff0c;在线下汇集数据库领域的行业知名人士&#xff0c;共同探讨数据库前沿技术及其应用&#xff0c;促进行业发展和创新的平台&#xff0c;也为开发者们提供友好交流的机会。 AntDB作为具有技术…

Kafka 基于 S3 的数据导出、导入、备份、还原、迁移方案

在系统升级或迁移时&#xff0c;用户常常需要将一个 Kafka 集群中的数据导出&#xff08;备份&#xff09;&#xff0c;然后在新集群或另一个集群中再将数据导入&#xff08;还原&#xff09;。通常&#xff0c;Kafka集群间的数据复制和同步多采用 Kafka MirrorMaker&#xff0…

【C++】常用集合算法

0.前言 1.set_intersection #include <iostream> using namespace std;// 常用集合算法 交集set_intersection #include<vector> #include<algorithm>void myPrint(int val) {cout << val << " "; }void test01() {vector<int>v…

Oracle启动报错解决:ora-00119和ora-00132

WINDOWS环境下&#xff0c; 查看Oracle的各项服务都正常&#xff0c; 但是SQL窗口启动ORACLE报错ora-00119和ora-00132&#xff0c;如何解决&#xff1a; 一、问题描述 1、ORACLE服务全部打开&#xff0c;没有报错&#xff1b; 2、plsql登陆报ora-12505错&#xff1b; 3、监听…

docker启动MySQL报错:退出状态码1

docker启动mysql反复重启&#xff0c;通过 使用 docker logs 容器ID chown: cannot read directory /var/lib/mysql/: Permission denied 但是目录权限确认没问题&#xff0c;即使 chmod 777 还是报相同的错误&#xff0c;后来发现是selinux的问题 查看状态 getenforce 临时…

保护个人隐私,自建个性图床:Cpolar+Qchan轻量级搭建教程分享

文章目录 前言1. Qchan网站搭建1.1 Qchan下载和安装1.2 Qchan网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar云端设置2.2 Cpolar本地设置 3. 公网访问测试总结 前言 图床作为云存储的一项重要应用场景&#xff0c;在大量开发人员的努力下&#xff0c;已经开发出大…

照片怎么换背景图?照片抠图换背景方法分享

照片怎么把背景进行更换呢&#xff1f;当我们拍好一张照片&#xff0c;但是对照片的背景不太满意&#xff0c;想要将照片的背景进行更换&#xff0c;怎么做才能实现呢&#xff1f;其实这一类的问题我们在制作海报的时候也会经常遇到&#xff0c;如果不是专业的图片编辑制作人员…

C++之weak_ptr与shared_ptr智能指针实例(一百九十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

问 ChatGPT 50个问题,耗水 500 毫升;通讯专家发帖称 iPhone 网络国内造假丨RTE开发者日报 Vol.47

开发者朋友们大家好&#xff1a; 这里是「RTE 开发者日报」&#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

mysql在ubuntu上命令行登陆密码不正确

1.登陆提示如下 2.使用mysql -u root -p登录也是类似的 3.打开宝塔面板 点击root密码&#xff0c;更改密码后即可在命令行界面登录 4.登录效果如下

Java从入门到精通-类和对象(二)

0. 类和对象 3. 类的构造方法 构造方法是一种特殊的方法&#xff0c;用于创建和初始化对象。构造方法的名称必须与类名相同&#xff0c;它没有返回值&#xff0c;并且在创建对象时自动调用。构造方法的主要作用是确保对象在创建时具有合适的初始状态。 以下是构造方法的基本概…

掌握这些,让你轻松玩转钡铼PLC网关与西门子S7-1200的MQTT通信

一、软硬件描述 西门子PLC S7-1215钡铼BL102网关mosquitto MQTT服务器&#xff08;腾讯云上搭建&#xff09;可以上网的路由器一套 二、需要使用的软件。 西门子Portal v15.1 (西门子PLC编程软件&#xff09;钡铼BL102调试软件及说明书。 说明书下载链接&#xff1a; http:/…

Map集合案例-统计投票人数

需求&#xff1a; 某个班级80名学生&#xff0c;现在需要组成秋游活动&#xff0c;班长提供了四个景点依次是(A、B、C、D)&#xff0c;每个学生只能选择一个景点&#xff0c;请统计出最终哪个景点想去的人数最多。 利用Map集合进行统计 //A06_HashMapDemo2.java package dail…

【报错】bash: curl: command not found

&#xff08;1&#xff09;报错&#x1f631;&#x1f631;&#x1f631; bash: curl: command not found &#xff08;2&#xff09;分析&#x1f430;&#x1f430;&#x1f430; 安装对应的工具包 curl即可。 &#xff08;3&#xff09;解决方法&#x1f489;&#x1f4…

分库分表知识点

分库分表专题 1.概述 1.1 分库分表是什么 小明是一家初创电商平台的开发人员&#xff0c;他负责卖家模块的功能开发&#xff0c;其中涉及了店铺、商品的相关业务&#xff0c;设计如下数据库&#xff1a; 通过以下SQL能够获取到商品相关的店铺信息、地理区域信息 SELECT p.*…