다음은 초등학교에서 배우는 나눗셈 계산표를 만들어주는 Java 소스 코드이다.
나눗셈 계산표를 완성하고 나서 약수, 배수 관계를 알려준다.
- /*
- * Filename: MakeDivisionTableApp.java
- *
- * Purpose: Make a division table in a handy written form.
- *
- * Compile: javac -d . MakeDivisionTableApp.java
- *
- * Execute: java MakeDivisionTableApp 12345 32
- * java MakeDivisionTableApp 500210 61
- *
- * Date: 2008/05/15
- * Author: PH Kim [ pkim ((AT)) scripts.pe.kr ]
- */
- import java.math.*;
- public class MakeDivisionTableApp {
- public static void printUsage() {
- // System.out.println("Using: java MakeDivisionTableApp [numerator] [denominator]");
- // System.out.println("Make a division table in a handy written form.");
- System.out.println("사용법: java MakeDivisionTableApp [피제수] [제수]");
- System.out.println("손으로 작성한 형태의 나눗셈 표를 만들어준다.");
- }
- public static String simplify(double v) {
- String t = "" + v;
- if (t.endsWith(".0"))
- t = t.substring(0, t.length() - 2);
- return t;
- }
- public static String simplify(BigInteger v, int width) {
- String t = "" + v;
- if (t.endsWith(".0"))
- t = t.substring(0, t.length() - 2);
- int len = t.length();
- if (len < width)
- t = " ".substring(0, width - len) + t;
- return t;
- }
- public String getSuffix(BigInteger v) {
- BigInteger t = v.mod(new BigInteger("10"));
- String suffix = "은";
- if ("2459".indexOf("" + t) >= 0) {
- suffix = "는";
- }
- return suffix;
- }
- public BigInteger makeTable(BigInteger numer, BigInteger denom, BigInteger quotient) {
- String strNumer = "" + numer;
- String strDenom = "" + denom;
- String strQuotient = "" + quotient;
- int lenN = strNumer .length();
- int lenD = strDenom .length();
- int lenQ = strQuotient .length();
- int offsetLeft = 3 + lenD + 3;
- String spaces = " ";
- String uline = "_________________________________________________________________________________".substring(0, lenN + 2);
- String sline = "---------------------------------------------------------------------------------".substring(0, lenN);
- int bias = lenN - lenQ;
- System.out.println(spaces.substring(0, offsetLeft) + spaces.substring(0, bias) + quotient);
- System.out.println(spaces.substring(0, offsetLeft - 2) + uline);
- System.out.print(" " + strDenom + " ) " + strNumer);
- String strTmpR = strNumer.substring(0, bias + 1);
- BigInteger tmpR = new BigInteger(strTmpR);
- BigInteger tmpSub = BigInteger.ZERO;
- String oneDigit = null;
- for (int i = 0; i < lenQ; i++) {
- if (strQuotient.substring(i, i + 1).equals("0")) {
- if (i + 1 < lenQ) {
- oneDigit = strNumer.substring(bias + i + 1, bias + i + 2);
- System.out.print(oneDigit);
- strTmpR += oneDigit;
- tmpR = new BigInteger(strTmpR);
- }
- }
- else {
- System.out.println();
- tmpSub = new BigInteger(strQuotient.substring(i, i + 1)).multiply(denom);
- System.out.println(spaces.substring(0, offsetLeft) + simplify(tmpSub, bias + i + 1));
- System.out.println(spaces.substring(0, offsetLeft) + sline);
- tmpR = tmpR.subtract(tmpSub);
- if (tmpR.equals(BigInteger.ZERO) && i + 1 < lenQ) {
- System.out.print(spaces.substring(0, offsetLeft) + spaces.substring(0, bias + i + 1));
- }
- else {
- System.out.print(spaces.substring(0, offsetLeft) + simplify(tmpR, bias + i + 1));
- }
- strTmpR = "" + tmpR;
- if (i + 1 < lenQ) {
- oneDigit = strNumer.substring(bias + i + 1, bias + i + 2);
- System.out.print(oneDigit);
- strTmpR += oneDigit;
- tmpR = new BigInteger(strTmpR);
- }
- }
- }
- System.out.println();
- return tmpR;
- }
- public static void main(String[] args) {
- if (args.length < 2) {
- printUsage();
- System.exit(1);
- }
- BigInteger a = null;
- BigInteger b = null;
- try {
- a = new BigInteger(args[0]);
- b = new BigInteger(args[1]);
- }
- catch (NumberFormatException ex) {
- System.out.println("피제수: " + args[0] + ", 제수: " + args[1]);
- System.out.println("숫자 입력에 오류가 있습니다.");
- System.exit(1);
- }
- if (a.compareTo(BigInteger.ZERO) <= 0) {
- System.out.println("피제수: " + a);
- System.out.println("피제수는 양의 정수라야 합니다.");
- System.exit(1);
- }
- else if (b.compareTo(BigInteger.ZERO) <=0) {
- System.out.println("제수: " + b);
- System.out.println("제수는 양의 정수라야 합니다.");
- System.exit(1);
- }
- MakeDivisionTableApp app = new MakeDivisionTableApp();
- BigInteger q = a.divide(b);
- BigInteger r = a.mod(b);
- System.out.print("나눗셈 " + a + " ÷ " + b + " 의 결과: ");
- System.out.print("몫: " + q + ", ");
- System.out.println("나머지: " + r);
- System.out.println();
- BigInteger k = app.makeTable(a, b, q);
- if (k.equals(r)) {
- System.out.println("\n나머지: " + k);
- }
- if (k.equals(BigInteger.ZERO)) {
- System.out.println(a + " = " + b + " x " + q);
- System.out.println(a + app.getSuffix(a) + " " + b + "의 배수(mupltiple)이다.");
- System.out.println(b + app.getSuffix(b) + " " + a + "의 약수(divisor)이다.");
- }
- else {
- System.out.println(a + " = " + b + " x " + q + " + " + r);
- System.out.println(a + app.getSuffix(a) + " " + b + "의 배수(mupltiple)가 아니다.");
- }
- }
- }
실행> java MakeDivisionTableApp 500210 61
나눗셈 500210 ÷ 61 의 결과: 몫: 8200, 나머지: 10 8200 ________ 61 ) 500210 488 ------ 122 122 ------ 10 나머지: 10 500210 = 61 x 8200 + 10 500210은 61의 배수(mupltiple)가 아니다.
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Java' 카테고리의 다른 글
Hello AWT 애플리케이션 예제 for Java (0) | 2009.01.29 |
---|---|
문자열 거꾸로 하기 with Java (0) | 2009.01.25 |
클래스 상속(subclassing) 예제 with Java (0) | 2008.04.05 |
컨솔에 삼각형 출력하는 여러 가지 메소드 비교 with Java (0) | 2008.04.05 |
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Java (0) | 2008.04.02 |