今天上课时有学生问起书中某个地方不明白,课间我匆忙看了一下,也没有一下子搞清楚由来。问题如下:怎样计算除法的商q,和余数r。
运行结果如下:
package chap01; /** * 《算法概论》P18 第一章 数字的算法——除法(图1-2) */ import java.util.Scanner; public class DivideP18 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); System.out.println("请输入被除数x 和 除数 y:(x<0结束)"); while(sc.hasNextInt()){ int x = sc.nextInt(); if(x<0) break; int y = sc.nextInt(); int[] re = divide(x,y); System.out.println(x+"/"+y+"="+re[0]+" 余"+re[1]); System.out.println("\n请输入被除数x 和 除数 y:(x<0结束)"); } sc.close(); } //P18 除法 public static int[] divide(int x, int y){ int[] result = new int[2]; if(x==0){ result[0] = 0; result[1] = 0; return result; } result = divide(x/2,y); result[0] *= 2; result[1] *= 2; if(x%2==1) result[1] += 1; if(result[1]>=y){ result[1] -= y; result[0] += 1; } System.out.println("(x,y,q,r)=("+x+","+y+","+result[0]+","+result[1]+")"); return result; } }