Java 数据结构与算法(1)-------------求最大公约数
2017-03-21 19:14
260 查看
一、问题:输入n个数据,输出它们的最大公约数。
最大公约数?
能整除一个数的数叫约数。而能被一个数整除的数叫倍数。
二、函数主体
(函数中测试数据为 64 20)
遇到的问题:程序输出不了东西!!!!
解决办法: 单步调试 注意循环的终止条件
数据正确性验证:如果用户乱输数据怎么办?
解决办法:1、正则表达式 2、输入函数控制
最大公约数?
能整除一个数的数叫约数。而能被一个数整除的数叫倍数。
二、函数主体
(函数中测试数据为 64 20)
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package javaapplication5; /** *功能简介: 本类中的所有静态方法都是用来求两个数的最大公约数。 * @author nazi */ public class JavaCalculater { private final static int m = 64 ; public final static int n = 20; /* func:传入两个整数,输出其最大公约数 算法: 辗转相除法 */ public static void greaterNum(int i , int j){ int r = i % j ; //余数r //如果j能整除i,则循环结束,j就是最大公约数 while(r!=0){ i = j; j = r; r = i % j ; }//for语句结束,准备输出 System.out.println("最大公约数是:"+ j); } /* func:求最大公约数 算法:辗转相除法(递归) */ public static void greaterNum2(int i , int j){ int r = i % j;//求余 //终止条件:余数为0 if(r == 0){ System.out.println("辗转相除算法最大公约数:"+j);//打印的是余数 }else{ i = j; j = r; greaterNum2(i , j); } } /* func:求最大公约数 算法:更相减损数 */ public static void greaterNum3(int i , int j){ int r = i - j; while(j!=r){ if(j < r){ i = r; r = i - j; }else if(j > r){ i = j; j = r; r = i -j; } } System.out.println("更相减法将;"+r); } /* func:质因数分解法 算法: 将一个数分解成多个质数相乘的形式 实现思路: 数组下标index代表质数,a[index]值代表出现次数。因而再求公共质数时极为方便 程序存在的问题: 数组长度定死。。。 */ public static void greaterNum4(int i , int j){ int []a = new int[20]; int []b = new int[20]; int index = 2; //质数分解 while(i>1){ while((i%index) == 0){//除到不能被2整除为止 i = i / index; //System.out.println(index); a[index]++; } index ++; }//while 结束 //质数分解 index = 2; while(j>1){ while((j%index) == 0){//除到不能被2整除为止 j = j / index; //System.out.println(index); b[index]++; } index ++; }//while 结束 int total =1; for(int in = 2; in <= 19;in++){ if(a[in]<=b[in]){ //此时以a为准 total =total * (int) Math.pow(in, a[in]); }else if(a[in]>b[in]){ //此时已b为准 total = (int) (total * Math.pow(in, b[in])); } } System.out.println("最大公约数:"+total); } /** * @param args the command line arguments */ public static void main(String[] args) { //辗转相除法v1.0 JavaCalculater.greaterNum(m,n); //辗转相除法v2.0 JavaCalculater.greaterNum2(m, n); //更相减损法 JavaCalculater.greaterNum3(m ,n); //质因数分解法 JavaCalculater.greaterNum4(m , n); } }测试结果:
遇到的问题:程序输出不了东西!!!!
解决办法: 单步调试 注意循环的终止条件
数据正确性验证:如果用户乱输数据怎么办?
解决办法:1、正则表达式 2、输入函数控制
/* func: 输入函数控制 */ public static void inputNum(){ System.out.println("输入的数请大于2"); Scanner in = new Scanner(System.in); int a = in.nextInt(); while(a<2){ System.out.println("输入的数请大于等于2"); a = new Scanner(System.in).nextInt(); }//while jieshu //System.out.println("数据验证成功,正在进行下一步"); }
相关文章推荐
- 数据结构——算法之(040)(最大公约数问题)
- 数据结构——算法之(040)(最大公约数问题)
- Pku acm 1274 The Perfect Stall 数据结构题目解题报告(十三)---- 匈牙利算法求二分图的最大匹配
- 数据结构——快速排序原理及算法Java实现
- JAVA数据结构与算法-第二章-数组
- 数据结构——算法之(006)(求子数组的最大和)
- Euclid算法求最大公约数--java实现
- Pku acm 2536 Gopher II 数据结构题目解题报告(十四)---- 匈牙利算法求二分图的最大匹配
- Pku acm 1469 COURSES 数据结构题目解题报告(十一)---- 匈牙利算法求二分图的最大匹配
- 求最大连续子序列之和的线性算法 c# 数据结构
- 自己对java数据结构跟算法的一点理解把
- java操练之求两数最大公约数的两种算法思路
- JAVA 数据结构与算法学习笔记一(转载)
- java经典算法_006最大公约数,最小公倍数
- java数据结构及算法三
- 数据结构与算法 Java语言描述-源代码
- 选择排序 Java数据结构与算法
- 三种算法求最大公约数——Java实现
- java算法之最大公约数及最小公倍数
- Java数据结构与算法--高级排序