算法1-1 模拟与高精度

news2025/1/30 14:40:52

目录

一 阶乘数码

 二 麦森数

 三 模拟题

一 阶乘数码


本题中n<=1000,1000的阶乘为以下这么大,远超long的范围
402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

使用高精度计算,BigInteger可以表示任意大的数,仅受到内存的限制

数码就是一个数0-9

public class P1591 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int t = scanner.nextInt();
        for (int i = 0; i < t; i++) {
            int n = scanner.nextInt();
            int a= scanner.nextInt();
            BigInteger m=new BigInteger("1");
            for (int j = 1; j <=n ; j++) {
                m=m.multiply(new BigInteger(j+""));
            }
            System.out.println(m);
            // 求sum中a的个数
            String string = m.toString();
            char[] chars = string.toCharArray();
            int count=0;
            for (char c : chars) {
                if (c-'0'==a){
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}

使用高精度计算,BigInteger可以表示任意大的数,仅受到内存的限制

数码就是一个数0-9

public class P1591 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int t = scanner.nextInt();
        for (int i = 0; i < t; i++) {
            int n = scanner.nextInt();
            int a= scanner.nextInt();
            BigInteger m=new BigInteger("1");
            for (int j = 1; j <=n ; j++) {
                m=m.multiply(new BigInteger(j+""));
            }
            System.out.println(m);
            // 求sum中a的个数
            String string = m.toString();
            char[] chars = string.toCharArray();
            int count=0;
            for (char c : chars) {
                if (c-'0'==a){
                    count++;
                }
            }
            System.out.println(count);
        }
    }
}

 二 麦森数

求一个数的位数,我们可以根据数学公式直接计算,不需要知道该数具体的值

法一:使用数学公式计算位数

public static void main(String[] args) {
    // 给一个数字P,求2的p次方-1 有多少位数字和最后500位
    Scanner scanner=new Scanner(System.in);
    int p=scanner.nextInt();
    // 使用数学公式直接计算位数
    int count= (int) ((Math.floor(p*Math.log10(2)))+1);
    System.out.println(count);
    // 直接算需要的后500位
    BigInteger two=new BigInteger("2");
    // 需要知道一个数的后n位,就对10的n次方取模
    BigInteger mod=BigInteger.TEN.pow(500);
    BigInteger last500=two.modPow(new BigInteger(p+""),mod).subtract(BigInteger.ONE);
    String str=last500.toString();
    if (str.length()<500){
        // 高位补0
        int diff=500-str.length();
        StringBuilder stringBuilder=new StringBuilder(0);
        for (int i = 0; i < diff; i++) {
            stringBuilder.append("0");
        }
        str=stringBuilder+str;
    }else{
       str=str.substring(str.length()-500);
    }
    // 每行输出50位 输出10行
    for (int i = 0; i < 10; i++) {
        System.out.println(str.substring(i*50,i*50+50));
    }
    scanner.close();
}

 法二:快速幂计算值,得出该数的位数

public static void main(String[] args) {
    // 给一个数字P,求2的p次方-1 有多少位数字和最后500位
    Scanner scanner=new Scanner(System.in);
    int p=scanner.nextInt();
    BigInteger result;
    // 快速幂
    result= quickMi(p);
    result=result.subtract(new BigInteger("1"));
    String str=result.toString();
    System.out.println(str.length());
    if (str.length()<500){
        // 高位补0
        int diff=500-str.length();
        StringBuilder stringBuilder=new StringBuilder(0);
        for (int i = 0; i < diff; i++) {
            stringBuilder.append("0");
        }
        str=stringBuilder+str;

    }else{
        str=str.substring(str.length()-500);
    }
    // 每行输出50位 输出10行
    for (int i = 0; i < 10; i++) {
        System.out.println(str.substring(i*50,i*50+50));
    }
}

private static BigInteger quickMi(int p) {
    BigInteger base = new BigInteger("2");
    BigInteger result = BigInteger.ONE;

    while (p > 0) {
        if (p % 2 == 1) {
            result = result.multiply(base);
        }
        base = base.multiply(base); // 平方
        p /= 2; // 指数除以2
    }
    return result;
}

    private static BigInteger quickMi(int p) {
        if (p==1){
            return new BigInteger("2");
        }
        if (p%2==0){
            // p位偶数
            BigInteger sum=quickMi(p/2);
            return sum.multiply(sum);
        }else{
            // p为奇数
            BigInteger sum=quickMi(p/2);
            return sum.multiply(sum).multiply(new BigInteger("2"));
        }
    }

 三 模拟题

思路:

  • 根据给定x,y值找到中心点,然后将2r+1阶矩阵顺时针旋转或者逆时针旋转

1 2 3 8 5 1 3 7 11

5 6 7 顺时针旋转90° -> 9 6 2 逆时针旋转90° -> 2 6 9

8 9 11 11 7 3 1 5 8

顺时针旋转:将某一列的值放到对应的行上(例如将第一列赋值到第一行),从下到上

逆时针旋转:最后一列元素放到第一行上,从上到下

注:在赋值元素时,如果直接替换容易元素覆盖,可以使用一个临时数组存储原来的元素,然后将对应元素赋值

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        int[][] array=new int[n+1][n+1];
        // 初始化数组
        int number=1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <=n ; j++) {
                array[i][j]=number++;
            }
        }
        // 改变 m 次矩阵
        for (int i = 0; i < m; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            int r = scanner.nextInt();
            int z = scanner.nextInt();

            int[][] temp = new int[n+1][n+1];
            for (int j = x - r; j <= x + r; j++) {
                for (int k = y - r; k <= y + r; k++) {
                    temp[j][k] = array[j][k];
                }
            }
            if (z == 0) {
                int x1 = x + r;
                int y1 = y - r;
                // 2.1 顺时针将行内元素反转
                for (int j = x - r; j <= x + r; j++) {
                    for (int k = y - r; k <= y + r; k++) {
                        // 将一列元素赋值到array对应的一行上
                        array[j][k] = temp[x1][y1];
                        x1--;
                    }
                    x1 = x + r;
                    y1++;
                }
            } else {
                int x1 = x - r;
                int y1 = y + r;
                // 逆时针
                for (int j = x - r; j <= x + r; j++) {
                    for (int k = y - r; k <= y + r; k++) {
                        // 将一列元素赋值到array对应的一行上
                        array[j][k] = temp[x1][y1];
                        x1++;
                    }
                    x1 = x - r;
                    y1--;
                }
            }
        }
        for (int i = 1; i< array.length; i++) {
            for (int j = 1; j < array.length; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
}
}

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

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

相关文章

公式与函数的应用

一 相邻表格相乘 1 也可以复制 打印标题

ShenNiusModularity项目源码学习(7:数据库结构)

ShenNiusModularity项目默认使用mysql数据库&#xff0c;数据库连接字符串放到了ShenNius.Admin. Mvc、ShenNius.Admin.Hosting的appsettings.json文件内。   ShenNiusModularity项目为自媒体内容管理系统&#xff0c;支持常规管理、CMS管理、商城管理等功能&#xff0c;其数…

手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)

手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion&#xff08;原理介绍&#xff09; 目录 手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion&#xff08;原理介绍&#xff09;DDPM 原理图Stable Diffusion 原理Stable Diffusion的原理解释Stable Diffusion 和 Diffus…

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(三)

Understanding Diffusion Models: A Unified Perspective&#xff08;三&#xff09; 文章概括 文章概括 引用&#xff1a; article{luo2022understanding,title{Understanding diffusion models: A unified perspective},author{Luo, Calvin},journal{arXiv preprint arXiv:…

修改maven的编码格式为utf-8

1.maven默认编码为GBK 注:配好MAVEN_HOME的环境变量后,在运行cmd. 打开cmd 运行mvn -v命令即可. 2.修改UTF-8为默认编码. 设置环境变量 变量名 MAVEN_OPTS 变量值 -Xms256m -Xmx512m -Dfile.encodingUTF-8 3.保存,退出cmd.重新打开cmd 运行mvn -v命令即可. 源码获取&…

从AD的原理图自动提取引脚网络的小工具

这里跟大家分享一个我自己写的小软件&#xff0c;实现从AD的原理图里自动找出网络名称和引脚的对应。存成文本方便后续做表格或是使用简单行列编辑生成引脚约束文件&#xff08;如.XDC .UCF .TCL等&#xff09;。 我们在FPGA设计中需要引脚锁定文件&#xff0c;就是指示TOP层…

【数据结构】(1)集合类的认识

一、什么是数据结构 1、数据结构的定义 数据结构就是存储、组织数据的方式&#xff0c;即相互之间存在一种或多种关系的数据元素的集合。 2、学习数据结构的目的 在实际开发中&#xff0c;我们需要使用大量的数据。为了高效地管理这些数据&#xff0c;实现增删改查等操作&…

解决使用Selenium时ChromeDriver版本不匹配问题

在学习Python爬虫过程中如果使用Selenium的时候遇到报错如下session not created: This version of ChromeDriver only supports Chrome version 99… 这说明当前你的chrome驱动版本和浏览器版本不匹配。 例如 SessionNotCreatedException: Message: session not created: This…

CAN波特率匹配

STM32 LinuxIMX6ull&#xff08;Linux&#xff09;基于can-utils测试

JavaScript中的相等运算符:`==`与`===`

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战

服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…

66-《虞美人》

虞美人 虞美人&#xff08;学名&#xff1a;Papaver rhoeas L.&#xff09;&#xff1a;一年生草本植物&#xff0c;全体被伸展的刚毛&#xff0c;稀无毛。茎直立&#xff0c;高25-90厘米&#xff0c;具分枝。叶片轮廓披针形或狭卵形&#xff0c;羽状分裂&#xff0c;裂片披针形…

obsidian插件——Metadata Hider

原本是要找导出图片时显示属性的插件&#xff0c;奈何还没找到&#xff0c;反而找到了可以隐藏属性的插件。唉&#xff0c;人生不如意&#xff0c;十之八九。 说一下功能&#xff1a; 这个插件可以把obsidian的文档属性放在右侧显示&#xff0c;或者决定只显示具体几项属性&a…

特种作业操作之低压电工考试真题

1.下面&#xff08; &#xff09;属于顺磁性材料。 A. 铜 B. 水 C. 空气 答案&#xff1a;C 2.事故照明一般采用&#xff08; &#xff09;。 A. 日光灯 B. 白炽灯 C. 压汞灯 答案&#xff1a;B 3.人体同时接触带电设备或线路中的两相导体时&#xff0c;电流从一相通过人体流…

[免费]基于Python的Django博客系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的基于Python的Django博客系统&#xff0c;分享下哈。 项目视频演示 【免费】基于Python的Django博客系统 Python毕业设计_哔哩哔哩_bilibili 项目介绍 随着互联网技术的飞速发展&#xff0c;信息的传播与…

进程池的制作(linux进程间通信,匿名管道... ...)

目录 一、进程间通信的理解 1.为什么进程间要通信 2.如何进行通信 二、匿名管道 1.管道的理解 2.匿名管道的使用 3.管道的五种特性 4.管道的四种通信情况 5.管道缓冲区容量 三、进程池 1.进程池的理解 2.进程池的制作 四、源码 1.ProcessPool.hpp 2.Task.hpp 3…

Gurobi 基础语法之 tupledict 和 tuplelist

Python中的字典&#xff1a;dict 我们先来介绍一下Python语法中的 dict 类型, 字典中可以通过任意键值来对数据进行映射&#xff0c;任何无法修改的python对象都可以当作键值来使用&#xff0c;这些无法修改的Python对象包括&#xff1a;整数(比如&#xff1a;1)&#xff0c;浮…

Flutter:搜索页,搜索bar封装

view 使用内置的Chip简化布局 import package:chenyanzhenxuan/common/index.dart; import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:tdesign_flutter/tdesign_flutter.dart;import i…

IoTDB 2025 春节值班与祝福

2025 春节快乐 瑞蛇迎吉庆&#xff0c;祥光映华年&#xff0c;2025 春节已近在眼前。社区祝福 IoTDB 的所有关注者、支持者、使用者 2025 新年快乐&#xff0c;“蛇”来运转&#xff01; IoTDB 团队的春节放假时间为 2025 年 1 月 27 日至 2 月 4 日&#xff0c;1 月 25 日、26…

刀客doc:禁令影响下,TikTok广告业务正在被对手截胡

一、 现如今&#xff0c;TikTok在美国的命运迎来了暂时的反转&#xff0c;根据Adage的报道&#xff0c;广告主的投放在恢复。但短暂的关闭带来的影响依然有余震&#xff0c;一些广告主在重新评估TikTok在自己广告预算中的地位&#xff0c;这些是竞争对手截胡的机会。 长期以…