java大整数包课程设计、各种运算

合集下载

java加减乘除运算函数

java加减乘除运算函数

java加减乘除运算函数Java是一种流行的计算机编程语言,它具有广泛的应用范围,从Web应用程序到计算机游戏、移动应用程序等等。

在Java中,加减乘除运算是最基本的数学操作之一。

为了方便开发人员进行这些操作,Java提供了一系列内置函数。

Java中的加法运算可以通过"+"符号来实现。

例如,如果您要将两个整数相加,可以使用以下代码:```int a = 5;int b = 3;int result = a + b;```在这个示例中,变量a和b分别设置为5和3,然后使用加号将它们加在一起,并将结果存储在变量result中。

此代码的输出结果将是8。

Java中的减法运算也很简单,使用“-”符号。

如果您要减去两个整数,请使用以下代码:```int a = 5;int b = 3;int result = a - b;```在这里,变量a和b都是不同的数,并使用减号将它们相减。

然后,将结果存储在result变量中。

输出将是2。

Java中的乘法运算使用“*”符号。

让我们看一个使用Java进行乘法运算的示例:```int a = 5;int b = 3;int result = a * b;```在这个例子中,变量a和b被相乘,得到15。

然后,将结果存储在result变量中。

Java中的除法运算使用“/”符号。

例如,以下代码将执行整数除法操作:```int a = 15;int b = 3;int result = a / b;```在这里,变量a和b都是整数,并使用除号将它们除在一起。

因为它是一个整数除法,它将返回5,将结果存储在result变量中。

除了以上的四个数学运算,Java中还有其他的运算符,比如取余符号“%”可以得到两数相除的余数。

同时,在Java中,还提供了一些高级的数学运算函数,比如sin、cos、tan等等,这些函数需要使用Java的数学库(java.math)来实现。

jav课程设计内容

jav课程设计内容

jav课程设计内容一、教学目标本节课的教学目标是让学生掌握Java编程语言的基本语法和编程思想,学会使用Java编写简单的控制台应用程序。

具体分为以下三个部分:1.知识目标:(1)了解Java语言的基本语法和数据类型。

(2)掌握Java程序的结构和编写方法。

(3)理解面向对象编程的基本概念,如类、对象、封装、继承和多态。

2.技能目标:(1)能够使用Java编写简单的控制台应用程序。

(2)学会使用Java编写面向对象的程序,具备初步的编程能力。

3.情感态度价值观目标:培养学生对编程语言的兴趣,激发学生主动学习和探索编程的欲望,培养学生的团队协作精神和自主学习能力。

二、教学内容本节课的教学内容主要包括以下几个部分:1.Java语言的基本语法和数据类型。

2.Java程序的结构和编写方法。

3.面向对象编程的基本概念,如类、对象、封装、继承和多态。

4.编写简单的控制台应用程序,巩固所学知识。

三、教学方法为了更好地实现教学目标,本节课采用以下几种教学方法:1.讲授法:讲解Java语言的基本语法、数据类型和程序结构。

2.案例分析法:通过分析实例,使学生掌握面向对象编程的基本概念。

3.实验法:让学生动手编写控制台应用程序,巩固所学知识。

4.讨论法:鼓励学生积极参与课堂讨论,培养学生的团队协作精神。

四、教学资源为了保证教学效果,本节课准备以下教学资源:1.教材:《Java编程入门》2.参考书:《Java核心技术》3.多媒体资料:PPT课件、教学视频4.实验设备:计算机、网络环境5.在线编程平台:例如LeetCode、牛客网,供学生课后练习和提高编程能力。

五、教学评估为了全面、客观地评估学生的学习成果,本节课采用以下几种评估方式:1.平时表现:观察学生在课堂上的参与程度、提问回答等情况,了解学生的学习态度和基本素养。

2.作业:布置适量作业,要求学生在规定时间内完成,通过作业质量评估学生的掌握程度。

3.考试:安排一次课堂小测,测试学生对Java基本语法和编程思想的掌握情况。

《Java程序设计》课程标准

《Java程序设计》课程标准

《Java程序设计》课程标准课程名称: Java程序设计课程性质:专业必修课学分: 4计划学时: 72课时适用专业:软件技术1.前言1.1课程定位JAVA程序设计是学生进入大学后学习的第二门计算机语言,属于专业必修课。

它是软件技术专业中的一门职业基础课程,旨在培养学生的基础编程能力,为以后的 Android 课程打好基础。

学生的基础打好对以后的实训及就业会有很大帮助。

软件技术专业的培养目标是培养出既要有熟练的掌握软件编程的动手操作能力,又要具备对软件工程的规范进行开发和基本的软件架构能力。

能够独立解决面临任务、充满活力、有创新意识的软件技能型人才。

重视基本知识、基本理论和基本技能的传授,注重先进实用技能的学习和学生专业可持续自我发展能力的培养及综合素质的提高。

1.2设计思路本课程坚持以能力为本位的设计原则,将面向对象程序设计的基本理论与实践技术相结合,把软件工程的思想融入到教学体系中,从基础理论及工程应用实践的角度出发培养学生的逻辑与编程思维、养成良好的程序设计习惯,掌握编程的基本方法,培养学生使用程序设计语言解决实际问题的能力。

使学生具备良好的专业技能和职业素养,形成具有优势的职业岗位竞争力。

打破以知识传授为主要特征的传统学科课程模式,转变为以工作任务为中心组织课程内容,并让学生在完成具体项目的过程中学会完成相应工作任务,并构建相关理论知识,发展职业能力。

课程内容突出对学生职业能力的训练,理论知识的选取紧紧围绕工作任务完成的需要来进行,同时又充分考虑了高等职业教育对理论知识学习的需要,并融合了相关职业资格证书对知识、技能和态度的要求。

项目设计以学生编程能力的培养为线索来进行。

教学过程中,要通过校企合作、校内实训基地建设等多种途径,采取工学结合、课程设计等形式,充分开发学习资源,给学生提供丰富的实践机会。

教学效果评价采取过程性评价与结果性评价相结合,理论与实践相结合,理论考试重点考核与实践能力紧密相关的知识,重点评价学生的职业能力。

java课程设计题目

java课程设计题目

java课程设计题目一、教学目标本课程旨在通过Java编程语言的学习,让学生掌握Java编程的基本语法、概念和编程技巧,培养学生具备基本的编程能力和解决问题的能力。

具体的教学目标如下:1.理解Java编程语言的基本语法和结构。

2.掌握Java中的基本数据类型、运算符和表达式。

3.熟悉Java中的控制结构、循环结构和数组操作。

4.了解Java中的面向对象编程概念,如类、对象、继承和多态。

5.能够使用Java编程语言编写简单的程序,解决实际问题。

6.能够运用面向对象编程思想,设计和实现具有一定复杂度的程序。

7.能够运用Java编程语言进行调试和优化程序,提高程序的性能和可读性。

情感态度价值观目标:1.培养学生对编程语言的兴趣和热情,激发学生对计算机科学的探索精神。

2.培养学生的问题解决能力和创新思维,鼓励学生勇于面对挑战和解决问题。

3.培养学生的团队合作意识和沟通能力,鼓励学生与他人合作共同完成项目。

二、教学内容根据课程目标,本课程的教学内容主要包括Java编程语言的基本语法、概念和编程技巧。

具体的教学大纲如下:第1-2周:Java编程基础1.Java语言概述和环境配置2.Java基本语法和数据类型3.运算符和表达式4.控制结构(条件语句、循环语句)第3-4周:面向对象编程1.类和对象的概念2.构造方法和成员变量3.继承和多态的概念和应用4.抽象类和接口第5-6周:Java高级特性1.异常处理和输入输出流2.集合框架和泛型编程3.线程和多线程编程4.Java网络编程基础三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法相结合的方式进行教学。

具体的教学方法如下:1.讲授法:通过教师的讲解和演示,向学生传授Java编程的基本概念和语法。

2.案例分析法:通过分析实际案例,让学生理解和掌握Java编程的技巧和方法。

3.实验法:通过上机实验,让学生亲手编写代码,培养学生的编程能力和实践能力。

java课程设计.docx

java课程设计.docx

java课程设计.docx一、教学目标本章节的教学目标分为三个部分:知识目标、技能目标和情感态度价值观目标。

知识目标:通过本章节的学习,学生需要掌握Java编程的基本语法、数据类型、控制结构、函数等基础知识。

技能目标:学生能够运用Java编程解决简单的实际问题,具备基本的编程能力。

情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生解决问题的能力。

二、教学内容本章节的教学内容主要包括Java编程的基本语法、数据类型、控制结构、函数等基础知识。

具体包括以下内容:1.Java编程的基本语法和规则2.数据类型:整数类型、浮点类型、字符类型、布尔类型等3.控制结构:顺序结构、选择结构、循环结构等4.函数:定义和调用函数,传递参数,返回值等5.常用内置函数:数学函数、字符串函数等三、教学方法本章节的教学方法采用讲授法、案例分析法和实验法相结合的方式进行。

1.讲授法:通过讲解和示范,让学生掌握Java编程的基本语法和规则,以及数据类型、控制结构、函数等基础知识。

2.案例分析法:通过分析实际案例,让学生学会如何运用Java编程解决实际问题。

3.实验法:通过上机实验,让学生动手实践,巩固所学知识,提高编程能力。

四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备等。

1.教材:选用权威、实用的Java编程教材,如《Java核心技术》等。

2.参考书:提供相关的Java编程参考书籍,如《Java编程思想》等。

3.多媒体资料:制作精美的PPT课件,提供Java编程相关的视频教程等。

4.实验设备:确保学生有足够的计算机设备进行上机实验。

五、教学评估本章节的教学评估主要包括平时表现、作业和考试三个部分,以全面、客观、公正地评估学生的学习成果。

1.平时表现:通过课堂参与、提问、讨论等方式,评估学生在课堂上的学习态度和表现。

2.作业:布置适量的作业,评估学生的知识掌握和运用能力。

3.考试:进行定期的考试,评估学生对章节知识的全面理解和掌握程度。

《Java程序设计》课程教学大纲

《Java程序设计》课程教学大纲

《Java程序设计》课程教学大纲课程编号:08120031课程名称:Java程序设计/JAVA Programming总学时/学分:48/3(其中理论32学时,实验16学时)适用专业:计算机科学与技术一、课程目标通过本课程学习,学生应达到如下目标:目标1. 识别Java语言特点、基本语法、语言机制。

目标2. 将面向对象方法知识运用在程序设计案例中,能使用JAVA常用类、枚举、lambda 表达式、容器、泛型进行实例编程验证。

目标3. 利用JavaSE中的异常处理、输入输出等技术来表达处理程序应用问题。

目标4. 将图形用户界面和数据库编程技术运用中综合应用程序设计中。

目标5. 搭建Java开发环境,能设计实现各种Java技术的应用程序,且能测试运行。

二、课程目标对毕业要求的支撑三、教学过程安排四、实验或上机内容五、课程目标达成方法六、考核标准本门课程考核包括6个部分,分别为考试、作业、实验、讨论和测验。

具体要求及评分方法如下:1、期末考试试卷知识点要求2、作业3、实验4、讨论设置讨论课一次,要求学生按照讨论题目分组查阅资料,归纳总结,撰写报告。

5、测验随堂测验,老师给出题目,学生回答。

具体有任课老师给出评分标准。

七、教材及主要参考资料[1] 黑马程序员. Java基础入门(第2版)[M]. 清华大学出版社, 2018.[2] 郑人杰、马素霞、殷人昆. 软件工程概论(第2版)[M]. 机械工业出版社,2016.[3] Gay S.Horstmann. Java核心技术(第10版)[M]. 机械工业出版社,2016.[4] Y.Daniel Liang(美). Java语言程序设计(第10版)[M]. 机械工业出版社.2015.[5] 李刚. 疯狂Java讲义(第4版)[M]. 电子工业出版社,2018.[6] 封亚飞. 揭秘Java虚拟机[M]. 电子工业出版社,2017.[7] Bruce Eckel(美). Java编程思想(第4版)[M]. 机械工业出版社,2007.。

大二java课程设计题目和代码

大二java课程设计题目和代码

大二java课程设计题目和代码简单投票管理系统、小学生数学练习题目自动生成系统、华容道-一个传统的智利游戏、用图形界面实现P208页,过桥问题、编写一个记事本程序、电子英汉词典、加密与解密、标准化考试系统、排球比赛计分系统、Hannoi塔、学籍管理系统、制作一个图形编辑系统、图书信息管理系统、ATM柜员机模拟系统、学生成绩管理信息系统、聊天**、记忆测试系统、超市收银系统、算法演示程序、网络聊天程序。

1、华容道-一个传统的智利游戏编写一个按钮的子类,使用该子类创建的对象代表华容道中的人物。

通过焦点事件控制人物颜色,当人物获得焦点时颜色为蓝色,当失去焦点时颜色为灰色。

通过键盘事件和鼠标事件来实现曹操、关羽等人物的移动。

当人物上发生鼠标事件或键盘事件时,如果鼠标指针的位置是在人物的下方(也就是组件的下半部分)或按下键盘的“↓“键,该人物向下移动。

向左、向右和向上的移动原理类似。

学习要点本程序主要练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器(鼠标事件、键盘事件和焦点事件)实现按钮的移动。

设计思路首先是界面设计,该界面主要包括十个人物按钮(马、曹操、关羽等)以及旁边的四个边框按钮和重新开始按钮。

对于人物按钮,我们可以创建Button按钮的子类,在该类中定义按钮的一些新的属性和焦点事件监听器,如:按钮的标签名、按钮的颜色、按钮的排号(如这里有十个人物按钮,从1排到十,在程序中可以依靠这个属性区分人物按钮)、按钮颜色、按钮获得或失去焦点事件。

同时在设计该界面时要考虑到各个按钮的位置、大小等情况。

在这给出了各按钮的位置和大小参数:(其中Person为继承Button按钮的人物按钮类)String name[]={"曹操","关羽","张","刘","马","许","兵","兵","兵","兵"}; for(int i=0;i<name.length;i++) {undefined person[i]=new Person(i,name[i]); person[i].addKeyListener(this);person[i].addMouseListener(this); // person[i].addFocusListener(new Person) add(person[i]); } person.setBounds(104,54,100,100);person.setBounds(104,154,100,50); person.setBounds(54,154,50,100);person.setBounds(204,154,50,100); person.setBounds(54,54,50,100);person.setBounds(204,54,50,100); person.setBounds(54,254,50,50);person.setBounds(204,254,50,50); person.setBounds(104,204,50,50);person.setBounds(154,204,50,50); 四个边框按钮的位置和大小参数为:left.setBounds(49,49,5,260); right.setBounds(254,49,5,260);above.setBounds(49,49,210,5); below.setBounds(49,304,210,5); 其次我们是对界面上的各人物按钮添加相应的相应事件(鼠标事件、键盘事件),通过这两种事件去完成界面上各人物按钮的移动。

java课程设计任务书

java课程设计任务书

java 课程设计任务书一、课程目标知识目标:1. 掌握Java基本语法和编程结构,理解面向对象编程的基本概念;2. 学习使用Java进行简单程序设计,包括变量声明、数据类型、运算符、流程控制语句等;3. 了解Java异常处理机制,掌握基本的异常处理方法;4. 理解类的定义和对象创建,掌握封装、继承和多态等面向对象的基本特性。

技能目标:1. 能够独立编写简单的Java程序,具备基本的编程能力;2. 能够运用所学知识解决实际问题,进行基础算法的实现;3. 学会使用调试工具进行程序调试,提高解决问题的能力;4. 培养良好的编程习惯,编写结构清晰、可读性强的代码。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习热情,树立自信心;2. 培养学生的团队协作精神,学会与他人共同解决问题;3. 培养学生严谨、踏实的学术态度,注重细节,追求卓越;4. 培养学生具备创新意识和探索精神,敢于尝试新方法,勇于克服困难。

课程性质:本课程为Java编程入门课程,旨在让学生掌握Java基本语法和编程技巧,培养面向对象的编程思维。

学生特点:学生处于初中或高中年级,具备一定的逻辑思维能力,对计算机编程感兴趣,但可能缺乏实际编程经验。

教学要求:结合学生特点,注重理论与实践相结合,通过实例教学,让学生在实践中掌握知识,提高编程能力。

同时,关注学生的情感态度,激发学习兴趣,培养良好的编程习惯。

在教学过程中,将目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. Java概述与开发环境搭建- 了解Java发展史、特点与应用领域- 学习Java开发环境搭建,熟悉集成开发工具2. Java基本语法- 变量声明、数据类型与运算符- 流程控制语句(条件语句、循环语句)- 数组的使用3. 面向对象基础- 类的定义、构造方法与实例化- 封装、继承与多态- 抽象类与接口4. Java常用类库与工具- String类与字符串操作- 异常处理机制- 集合框架简介5. 简单的Java程序设计- 编写控制台输入输出程序- 实现基础算法(排序、查找等)- 文件读写操作6. 综合案例分析与实践- 案例分析:经典算法实现、小型项目开发- 实践项目:学生信息管理系统、简易计算器等教学内容安排与进度:第1周:Java概述与开发环境搭建第2-3周:Java基本语法第4-5周:面向对象基础第6周:Java常用类库与工具第7周:简单的Java程序设计第8周:综合案例分析与实践教材章节关联:《Java编程思想》第1-3章:Java概述、基本语法、流程控制《Java编程思想》第4-7章:面向对象基础、封装、继承与多态《Java核心技术》第1部分:Java基本语法、面向对象、异常处理等《Java核心技术》第2部分:Java常用类库、文件读写、集合框架等三、教学方法1. 讲授法:- 对于Java基本语法、面向对象基础等理论性较强的内容,采用讲授法进行教学,由教师系统地讲解知识点,帮助学生构建知识体系。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

import java.util.*;public class BigNum {public static void main(String[] args){String s,s1=null,s2=null;Scanner cin = new Scanner(System.in);char op;System.out.println("请输入第一个大整数,并按回车结束:");if(cin.hasNext()) {s1 = cin.next();}System.out.println("请输入要进行的运算的运算符,并按回车结束:");s = cin.next();op = s.charAt(0);System.out.println("请输入第二个大整数,并按回车结束:");if(cin.hasNext()) {s2 = cin.next();}if(op=='+') {System.out.println("最终结果为:");System.out.println(add(s1,s2));}if(op=='-') {System.out.println("最终结果为:");System.out.println(jianfa(s1,s2));}if(op=='*') {System.out.println("最终结果为:");System.out.println(chengfa(s1,s2));}if(op=='/') {System.out.println("最终结果为:");System.out.println(chufa(s1,s2));}if(op=='%') {System.out.println("最终结果为:");System.out.println(quyu(s1,s2));}if(op=='M') {String s3 = null;System.out.println("请输入第三个大整数,并按回车结束:");if(cin.hasNext()) {s3 = cin.next();}System.out.println("最终结果为:");System.out.println(mimo(s1,s2,s3));}if(op=='G') {System.out.println("最终结果为:");System.out.println(gcd(s1,s2));}if(op=='N') {System.out.println("最终结果为:");chengfani(s1,s2);}if(op=='S') {System.out.println("请输入需要的大整数位数:");int s3=0;if(cin.hasNext()) {s3 = cin.nextInt();}System.out.println("最终结果为:");System.out.println("大素数为"+dasushu(s3));}}/*大字符串数字加法*/public static String add(String data1 , String data2){int j = 0 , k = 0 , x = 0,y = 0 , z = 0;String jieguo="";if(data1.charAt(0)=='-') {data1 = data1.substring(1);//去掉大整数前面的负号y++;}if(data2.charAt(0)=='-') {data2 = data2.substring(1);//去掉大整数前面的负号z++;}if(y==1&&z==0) {jieguo=jianfa(data2,data1);}else if(z == 1&&y==0){jieguo=jianfa(data1,data2);}else if((z==0&&y==0)||(z==1&&y==1)){while(data1.length()>data2.length()) {data2 = "0"+data2;//高位不足补零}while(data1.length()<data2.length()) {data1 = "0"+data1;}char[] char1 = data1.toCharArray();char[] char2 = data2.toCharArray();int[] result = add(char1,char2); //调用加法运算函数for(int i = 0 ;i<result.length;i++) {jieguo +=result[i];}while(jieguo.charAt(x)=='0') {x++;}jieguo = jieguo.substring(x);//去掉大整数前面的所有无效的数字0if(y+z==2){jieguo = "-"+jieguo;}}x = 0;while((jieguo.charAt(x)=='0')&&(x<jieguo.length()-1)) {x++;}jieguo = jieguo.substring(x);//去掉结果前面的所有无效的数字0return jieguo ;}/*位数相同的整数加法*/public static int[] add(char[] char1 , char[] char2){int[] result = new int[char1.length + 1]; //相加后最多向上进1位int shiweiNum = 0; //每位相加后的十位数字int len = char1.length;for(int i = len - 1 , j = i + 1; i >= 0 ; i--,j--){ //一位一位相加拼成结果int num1 = Integer.parseInt(char1[i]+"");int num2 = Integer.parseInt(char2[i]+"");int count = num1 + num2 + shiweiNum;result[j] = count % 10;shiweiNum = count / 10; //和大于10进位}if(shiweiNum==1) {result[0] = 1;}return result;}/*将大字符串变为相同位数*/public static String jianfa(String data1,String data2) {int i= 0 ,j = 0,x = 0,y=0,z = 0;String jieguo = "";String temp = "";if(data1.charAt(0)=='-') {data1 = data1.substring(1);//去掉大整数前面的负号y++;}if(data2.charAt(0)=='-') {data2 = data2.substring(1);//去掉大整数前面的负号z++;}if(z == 1&&y==0) {jieguo = add(data2,data1);}else if(y==1&&z==1) {jieguo = add(data2,"-"+data1);}else if(y==1&&z==0) {jieguo = "-"+add(data1,data2);}else {while(data1.charAt(i)=='0'&&i<data1.length()-1) {i++;}data1 = data1.substring(i);//去掉大整数前面的所有无效的数字0 while(data2.charAt(j)=='0'&&j<data2.length()-1) {j++;}data2 = data2.substring(j);if(!compare(data2,data1)) {//比较减数与被减数大小temp = data1;//若被减数小于减数,则互换位置data1 = data2;data2 = temp;x = -1;//记录大小}else {x = 1;}while(data1.length()>data2.length()) {data2 = "0"+data2;//高位不足补零}while(data1.length()<data2.length()) {data1 = "0"+data1;}char[] char1 = data1.toCharArray();char[] char2 = data2.toCharArray();String result = jian(char1,char2); //调用减法运算函数if(x < 0){jieguo = "-"+result;}else {jieguo = result;}}x = 0;while((jieguo.charAt(x)=='0')&&(x<jieguo.length()-1)) {x++;}jieguo = jieguo.substring(x);//去掉结果前面的所有无效的数字0return jieguo;}/*相同位数的数字相减*/public static String jian(char[] char1 , char[] char2) {int[] result = new int[char1.length];int tuiwei = 0 ; //每位相减后的十位数字int len = char1.length;String jieguo = "";for(int i = len - 1 ; i >= 0 ; i-- ){ //一位一位相减拼成结果int num1 = Integer.parseInt(char1[i]+"");int num2 = Integer.parseInt(char2[i]+"");int count = 0;if(num1-num2+tuiwei<0) {count = num1+10-num2+tuiwei;//借位相减tuiwei = -1;}if(num1-num2+tuiwei>=0) {count = num1-num2+tuiwei;//无需借位,直接相减tuiwei = 0;}result[i] = count % 10;}for(int i=0 ; i<result.length ; i++) {jieguo = jieguo+String.valueOf(result[i]);}return jieguo;}/*大整数乘法的转换函数*/public static String chengfa(String data1,String data2) {int i=0,j=0;if(data1.charAt(0)=='-') {data1 = data1.substring(1);//去掉大整数前面的负号i++;}if(data2.charAt(0)=='-') {data2 = data2.substring(1);//去掉大整数前面的负号j++;}char[] char1 = data1.toCharArray();char[] char2 = data2.toCharArray();int[] result = cheng(char1,char2);String jieguo="";if(i+j==1) {jieguo = "-";//乘数与被乘数当且仅当只有一个为负数时,结果为负数for(int k=0;k<char1.length+char2.length-1;k++) {jieguo +=result[k];//将最终结果表示成字符串形式}}else {for(int k=0;k<char1.length+char2.length-1;k++) {jieguo +=result[k];}}return jieguo;}/*高精度乘法函数*/public static int[] cheng(char[] char1 , char[] char2) {int[] a = new int[char1.length];int[] b = new int[char2.length];int[] result = new int[char1.length+char2.length-1];int[][] c = new int[char1.length][char2.length];String jieguo="";//最终结果的字符串形式for(int i = 0; i<char1.length ; i++) {a[i] = Integer.parseInt(char1[i]+"");}for(int i = 0; i<char2.length ; i++) {b[i] = Integer.parseInt(char2[i]+"");}for(int i = 0; i<char1.length ; i++) {for(int j = 0; j<char2.length; j++) {c[i][j] = a[i]*b[j];//将大整数一位一位相乘}}int k = 0;while(k<char1.length+char2.length-1) {for(int i = 0; i<char1.length; i++) {for(int j = 0;j<char2.length; j++) {if(i+j==k) {result[k] += c[i][j]; //错位相加得到result}}}k++;}for(int i = char1.length+char2.length-1-1 ; i>0 ;i--) {if(result[i]>9){result[i-1] +=result[i]/10;result[i] = result[i]%10;}}return result;}/*大整数除法转换函数*/public static String chufa(String data1,String data2) {int i=0,j=0,x=0,y=0;String jieguo = "";if(data1.charAt(0)=='-') {data1 = data1.substring(1);//去掉大整数前面的负号x++;}if(data2.charAt(0)=='-') {data2 = data2.substring(1);//去掉大整数前面的负号y++;}while(data1.charAt(i)=='0'&&i<data1.length()-1) {i++;}data1 = data1.substring(i);//去掉大整数前面的所有无效的数字0while(j<data2.length()-1&&data2.charAt(j)=='0') {j++;}data2 = data2.substring(j);if( panduan(data2)) {System.out.println("除数不能为0,请重新输入!");System.exit(-1);}else {jieguo = chu(data1,data2);if(x+y==1) {jieguo = "-"+jieguo;//除数与被除数当且仅当只有一个为负数时,结果为负数}}return jieguo;}/*高精度除法函数*/public static String chu(String data1,String data2) {String jieguo = "";int count = 0;int num=data1.length()-data2.length();if(!compare(data2,data1)) {num = -1;}if(num<0) {jieguo ="0"; //data2>data1时,返回商"0"}else if( panduan(jianfa(data1,data2))){jieguo ="1";// data2等于data1时,返回商"1"}else {while(num>=0) {while(data1.length()>data2.length()) {data2 = data2+"0";//除数末位补0}if(!compare(data2,data1)) {data1 = data1+"0";//被除数末位补0if(count==0) {num--;}}for(int i=9;i>0;i--) {if(compare(chengfa(data2,String.valueOf(i)),data1)) {data1 = jianfa(data1,chengfa(data2,String.valueOf(i)));//减去已经除去的字符段jieguo +=i;break;}if(i == 1) {jieguo +=0;}}num--;count++;}}return jieguo;}/*字符串比较函数,第二个参数大于等于第一个数时返回true*/public static boolean compare(String data1 , String data2) {int i = 0,k = 0,j = 0;while(data1.charAt(k)=='0'&&k<data1.length()-1) {k++;}data1 = data1.substring(k);//去掉大整数前面的所有无效的数字0while(j<data2.length()-1&&data2.charAt(j)=='0') {j++;}data2 = data2.substring(j);if(data1.length()>data2.length()) {return false;//若第一个数长度大于第二个数,则值一定大于第二个数,返回false}else if(data1.length()<data2.length()) {return true;//若第一个数长度小于第二个数,则值一定小于第二个数,返回true}else {i = pareTo(data2);//长度相等的两个字符串比较函数,从最高位字符开始,ASC码相减,返回给iif(i>0) {return false;}else {return true;}}}/*大整数判断函数,判断字符串是否为数字形式的0*/public static boolean panduan(String data) {int z=0,num=data.length(),count = 0;while(num>0) {if(data.charAt(count)!='0') {z++; //若截取的字符为'0',则z+1}count++;num--;}if(z==0) {return true;//只有当所有截取的字符为'0'时,z等于0,字符串为数字形式的0,返回true}else {return false;}}/*取余处理函数*/public static String quyu(String data1,String data2) {int a = 0,b = 0;String jieguo = "";if(data1.charAt(a)=='-') {a++;}data1 = data1.substring(a); //去掉字符串前负号if(data2.charAt(b)=='-') {b++;}data2 = data2.substring(b);jieguo = rem(data1,data2);if(a==1) {jieguo = "-"+jieguo;}return jieguo;}/*对两个正大整数取余*/public static String rem(String data1,String data2) {String x = "0";String jieguo;if(!compare(data2,data1)) {return data1;//如果data2>data1,data1为余数,直接返回}else if(compare(data2,data1)&&compare(data1,data2)) {return "0"; //如果data1等于data2,返回0}else {jieguo = jianfa(data1,chengfa(chufa(data1,data2),data2));//如果data2<data1,data1减去data1除以data2商乘以data2得到余数}return jieguo;}/*幂模处理函数*/public static String mimo(String data1,String data2,String data3) {int x=0 ,y=0;String jieguo = "";if(data1.charAt(0)=='-') {data1 = data1.substring(1);//去掉大整数前面的负号x++;}if(data2.charAt(0)=='-') {data2 = data2.substring(1);//去掉大整数前面的负号y++;}if(x+y>=1) {System.out.println("负数无法进行幂模运算,请重新输入!");System.exit(-1);}else {jieguo = modular( data1, data2,data3);}return jieguo;}/*进行幂模运算函数*/public static String modular(String data1,String data2,String data3) { String jieguo = "";String x="",y="";int count = 0; // 计数器String a="";String d="1";while(!panduan(data2)) { //将十进制的指数data2转换成二进制x = chufa(data2,"2");y = quyu(data2,"2");a = a+y;data2 = x;count++;}//System.out.println(a);count--; //a的位数为count+1for(;count>=0;count--) {d = quyu(chengfa(d,d),data3);if(a.charAt(count)=='1') {d = quyu(chengfa(d,data1),data3);}//System.out.println(d);}return d;}/*GCD转换函数*/public static String gcd(String data1,String data2) {if((data1.charAt(0)=='-')||(data2.charAt(0)=='-') ){System.out.println("负数无法进行GCD运算,请重新输入!");//遇到负数报错System.exit(-1);}else {if(panduan(data2)) {return data1;//若data2为0,则data1为最大公约数并返回}}return gcd(data2,quyu(data1,data2)); //用递归实现求最大公约数}/*欧几里德算法求最大公约数public static String Euclid(String data1,String data2) {String jieguo = "";String j ="";String i ="1";while(true) {j = jianfa(data1,chengfa(data2,i));if(panduan(j)) {break;}data1 = data2 ;data2 = j;i = add(i,"1");}jieguo =data2;return jieguo;}*//*欧几里德扩展算法求乘法逆元*/public static String chengfani(String data1,String data2){String x1="",x2="",x3="",y1="",y2="",y3="",t1="",t2="",t3="",q="";x1 = y2 = "1";x2 = y1 = "0";x3 = (compare(data2,data1))?data1:data2;y3 = (compare(data2,data1))?data2:data1;String result="";while( true ) {if ( panduan(y3)) {result = x3; // 两个数不互素则result为两个数的最大公约数System.out.println(data1+"和"+data2+"不互素,最大公约数为:"+result);break;}if ( y3.charAt(0) == '1' ) {result = y2; // 两个数互素则result为乘法逆元System.out.println(data1+"和"+data2+"互素,乘法的逆元是:"+result);break;}q = chufa(x3,y3);t1 = jianfa(x1 , chengfa(q,y1));t2 = jianfa(x2 , chengfa(q,y2));t3 = jianfa(x3 , chengfa(q,y3));x1 = y1;x2 = y2;x3 = y3;y1 = t1;y2 = t2;y3 = t3;}return result;}/*函数产生一个随机数*/public static String dasushu(int s3) {String jieguo = "";char a;int j = 0,x = 0,i = 0;boolean b = true ;while(true) {String data="";for(i= 0;i<s3;i++) {data = data+(int)(Math.random()*10);}a=data.charAt(s3-1);//截取大素数末位if(data.charAt(0)=='0') {continue;}if(compare(data,"1")) {continue;}else {System.out.println("产生大数"+data);if(compare(data,"5")&&((a=='2')||(a=='3')||(a=='5'))) {jieguo = ""+a;//若data等于1,2,3,5直接将值赋给databreak;}if(compare(data,"5")&&(a =='4')){continue;//若data等于4,重新产生大素数}if((a=='0')||(a=='2')||(a=='4')||(a=='5')||(a=='6')||(a=='8')) {continue;//若大于5的数尾数为0,2,4,5,6,8,则重新产生大素数}if((a=='1')||(a=='3')||(a=='7')||(a=='9')){while(x<50) {//进行100次大素数检测,以减小误差b = rabin(data);if(b==false) {//System.out.println("-");break;//若有一次未通过检测,则直接跳出循环}x++;//System.out.println("--");}if(b==true) {System.out.println("x="+x);jieguo = data;//System.out.println("--");break;//若通过100次Miller-Rabin检测,则data为大素数,跳出循环}else {continue;//若没有通过Miller-Rabin检测,则data不为大素数,重新产生大素数}}}}return jieguo;}/*判断一个大整数是否为素数*/public static boolean rabin(String data) {int k =0 ;String m=jianfa(data,"1");String b="";String data2="";boolean bo = true;//System.out.println("Data="+data);while(true) {m = chufa(m,"2");//将data-1写成(2^k)m的形式k++;if(compare(quyu(m,"2"),"1")&&compare("1",quyu(m,"2"))) {//System.out.println("-----");break;}//System.out.println("m="+m);//System.out.println(k);}//System.out.println("m="+m);while(true) {String data1="";for(int i= 0;i<jianfa(data,"1").length();i++) {data1 = data1+(int)(Math.random()*10);//在2~data-1中选取一个数data1}if(compare("2",data1)&&compare(data1,jianfa(data,"1"))) {//判断生成数是否大于2小于data1data2 = data1;break;// 生成数大于2小于data1跳出循环}}//System.out.println("data2="+data2);b = mimo(data2,m,data);//进行幂模运算if(compare(b,"1")&&compare("1",b)) {return true;//幂模值为1,是大素数,返回true}for(int i=0;i<k;i++) {if(compare(b,jianfa(data,"1"))&&compare(jianfa(data,"1"),b)) {return true;}else {b = quyu(chengfa(b,b),data);}}return false;}/*指数函数*//*public static String mi(String data1,String data2) {String result="1";for(String i = "1";compare(i,data2);add(i,"1")) {result=chengfa(result,data1);}return result;}*/}。

相关文档
最新文档