DigitGroupAsInt.java
package digitGroup;
import java.util.Stack;
/**
* 10진수를 입력받아, 천(1000)자리 구분자를 추가하는 프로그램.
* (숫자 타입 처리 및 수행 시간 측정)
*/
public class DigitGroupAsInt {
public static void main(String args[]) {
int loopCount = 1000000;
for(int idx=0; idx<10; idx++) {
long startMilliTime = System.currentTimeMillis();
benchmark(10, 10, loopCount);
long endMilliTime = System.currentTimeMillis();
System.out.println( loopCount + ";" + (endMilliTime - startMilliTime));
loopCount += 1000000;
}
}
private static void benchmark(int startNum, int interval, int loopCount) {
int inputNumber = startNum;
for(int cnt=0; cnt<loopCount; cnt++) {
convert(inputNumber);
inputNumber += interval;
}
}
private static String convert(int number) {
final int DECIMAL_NUMBER = 10;
final char THOUSANDS_SEPARATOR = ',';
Stack<Character> digitStack = new Stack<Character>();
StringBuilder sb = new StringBuilder();
int quotient, spare, count = 0;
do {
// 몫과 나머지 계산
quotient = number / DECIMAL_NUMBER;
spare = number % DECIMAL_NUMBER;
// 몫을 n 에 재할당, 나머지는 스택에 추가
number = quotient;
digitStack.push(Character.forDigit(spare, 10));
// 3개의 숫자를 추가했다면, 구분자를 버퍼에 추가
if (++count == 3 && quotient > 0) {
digitStack.push(THOUSANDS_SEPARATOR);
count = 0;
}
} while (quotient > 0);
// 스택에 저장된 숫자를 꺼내 문자열 버퍼에 추가
while (!digitStack.empty()) {
sb.append(digitStack.pop());
}
return sb.toString();
}
}