算法1-1 模拟与高精度
目录
一 阶乘数码
二 麦森数
三 模拟题
一 阶乘数码

本题中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){// 高位补0int 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){// 高位补0int 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();}
}
}相关文章:
算法1-1 模拟与高精度
目录 一 阶乘数码 二 麦森数 三 模拟题 一 阶乘数码 本题中n<1000,1000的阶乘为以下这么大,远超long的范围 402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901…...
JS中对数组的操作哪些会改变原数组哪些不会?今天你一定要记下!
JavaScript 数组方法:变更原数组与不变更原数组的区别 在 JavaScript 中,数组是非常常见且重要的数据结构。作为开发者,我们常常需要使用数组方法来处理数组数据。但是,数组的不同方法会以不同的方式影响原数组,它们可…...
公式与函数的应用
一 相邻表格相乘 1 也可以复制 打印标题...
ShenNiusModularity项目源码学习(7:数据库结构)
ShenNiusModularity项目默认使用mysql数据库,数据库连接字符串放到了ShenNius.Admin. Mvc、ShenNius.Admin.Hosting的appsettings.json文件内。 ShenNiusModularity项目为自媒体内容管理系统,支持常规管理、CMS管理、商城管理等功能,其数…...
【STL笔记】字符串
字符串 下标从0开始,常规用法不再赘述,持续更新中… 1. substr(pos,len): 返回从位置 pos 开始,长度为 len 的子串。(len默认为npos) std::string str "Hello, World!"; std::string sub1 str.substr(7, 5); // 提…...
java知识点 | java中不同数据结构的长度计算
在Java中,size 和 length是两个不同的属性,分别用于不同的数据结构。以下是它们的详细区别和适用场景: 1.length 适用对象: 数组(Array):数组是一个固定长度的线性数据结构,其长度是…...
WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)
手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍) 目录 手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)DDPM 原理图Stable Diffusion 原理Stable Diffusion的原理解释Stable Diffusion 和 Diffus…...
AI软件栈:LLVM分析(一)
文章目录 AI 软件栈后端编译LLVM IRLLVM的相关子项目AI 软件栈后端编译 AI软件栈的后端工作通常与硬件架构直接相关,为了实现一个既能适配现代编程语言、硬件架构发展的目标,所以提出了LLVM具备多阶段优化能力提供基础后端描述,便于进行编译器开发兼容标准编译器的行为LLVM …...
编程语言中的常见Bug及解决方案
在编程过程中,不同语言有其独特的特性和挑战,这也导致了各种常见Bug的出现。本文将总结几种主流编程语言中的常见Bug,包括JavaScript、Python、C/C、Java和Go,并提供相应的解决方案和案例。 一、JavaScript中小数相加精度不准确的…...
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(三)
Understanding Diffusion Models: A Unified Perspective(三) 文章概括 文章概括 引用: 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的原理图自动提取引脚网络的小工具
这里跟大家分享一个我自己写的小软件,实现从AD的原理图里自动找出网络名称和引脚的对应。存成文本方便后续做表格或是使用简单行列编辑生成引脚约束文件(如.XDC .UCF .TCL等)。 我们在FPGA设计中需要引脚锁定文件,就是指示TOP层…...
Coze,Dify,FastGPT,对比
在当今 AI 技术迅速发展的背景下,AI Agent 智能体成为了关键领域,Coze、Dify 和 FastGPT 作为其中的佼佼者,各有千秋。 平台介绍 - FastGPT:由环界云计算公司发起,是基于大语言模型(LLM)的开源…...
【数据结构】_链表经典算法OJ(力扣版)
目录 1. 移除链表元素 1.1 题目描述及链接 1.2 解题思路 1.3 程序 2. 反转链表 2.1 题目描述及链接 2.2 解题思路 2.3 程序 3. 链表的中间结点 3.1 题目描述及链接 3.2 解题思路 3.3 程序 1. 移除链表元素 1.1 题目描述及链接 原题链接:203. 移除链表…...
【数据结构】(1)集合类的认识
一、什么是数据结构 1、数据结构的定义 数据结构就是存储、组织数据的方式,即相互之间存在一种或多种关系的数据元素的集合。 2、学习数据结构的目的 在实际开发中,我们需要使用大量的数据。为了高效地管理这些数据,实现增删改查等操作&…...
Vue 3 中的 TypeScript:接口、自定义类型与泛型
在 Vue 3 中,TypeScript 提供了强大的类型系统,帮助我们更好地管理代码的类型安全。通过使用 接口(Interface)、自定义类型(Type Aliases) 和 泛型(Generics),我们可以编…...
计算机组成原理(计算机系统3)--实验七:新增指令实验
一、实验目标 了解RISC-V mini处理器架构,在其基础之上新增一个指令,完成设计并观察指令执⾏。 二、实验内容 1) 修改数据通路,新增指令comb rs1,rs2,rd采用R型指令格式,实现将rs1高16位和rs2低16位拼接成32位整数,…...
LeetCode 0040.组合总和 II:回溯 + 剪枝
【LetMeFly】40.组合总和 II:回溯 剪枝 力扣题目链接:https://leetcode.cn/problems/combination-sum-ii/ 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates…...
解决使用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(Linux)基于can-utils测试...
JVM垃圾回收器的原理和调优详解!
全文目录: 开篇语前言摘要概述垃圾回收器分类及原理1. Serial 垃圾回收器2. Parallel 垃圾回收器3. CMS 垃圾回收器4. G1 垃圾回收器 源码解析示例代码 使用案例分享案例 1:Web 服务的 GC 调优案例 2:大数据任务的 GC 优化 应用场景案例垃圾回…...
与机器学习相关的概率论重要概念的介绍和说明
概率论一些重要概念的介绍和说明 1、 试验 (1)试验是指在特定条件下,对某种方法、技术、设备或产品(即,事物)进行测试或验证的过程。 (2)易混淆的概念是,实验。实验&…...
JavaScript中的相等运算符:`==`与`===`
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
A7. Jenkins Pipeline自动化构建过程,可灵活配置多项目、多模块服务实战
服务容器化构建的环境配置构建前需要解决什么下面我们带着问题分析构建的过程:1. 如何解决jenkins执行环境与shell脚本执行环境不一致问题?2. 构建之前动态修改项目的环境变量3. 在通过容器打包时避免不了会产生比较多的不可用的镜像资源,这些资源要是不及时删除掉时会导致服…...
66-《虞美人》
虞美人 虞美人(学名:Papaver rhoeas L.):一年生草本植物,全体被伸展的刚毛,稀无毛。茎直立,高25-90厘米,具分枝。叶片轮廓披针形或狭卵形,羽状分裂,裂片披针形…...
obsidian插件——Metadata Hider
原本是要找导出图片时显示属性的插件,奈何还没找到,反而找到了可以隐藏属性的插件。唉,人生不如意,十之八九。 说一下功能: 这个插件可以把obsidian的文档属性放在右侧显示,或者决定只显示具体几项属性&a…...
MySQL中InnoDB逻辑存储结构
在MySQL中,InnoDB是最常用的存储引擎之一,它具有高度的事务支持、行级锁、ACID特性以及自动崩溃恢复等特性。InnoDB的逻辑存储结构可以分为多个层次,下面是详细的解析。 1. 表空间 (Tablespace) InnoDB的物理存储结构以表空间为基础。表空间…...
高阶C语言|深入理解字符串函数和内存函数
文章目录 前言1.求字符串长度1.1 字符串长度函数:strlen模拟实现 长度不受限制的字符串函数1.2 字符串拷贝函数:strcpy模拟实现 1.3 字符串连接函数:strcat模拟实现 1.4 字符串比较函数:strcmp模拟实现 长度受限制的字符串函数2.1…...
Pandas DataFrame 拼接、合并和关联
拼接:使用 pd.concat(),可以沿着行或列方向拼接 DataFrame。 合并:使用 pd.merge(),可以根据一个或多个键进行不同类型的合并(左连接、右连接、全连接、内连接)。 关联:使用 join() 方法,通常在设置了索引的 DataFrame 上进行关联操作。 concat拼接 按列拼接 df1 = …...
