정수 숫자 읽기num2Voice

6824 단어
이것은 모 구인 사이트에서 본 모 인터넷 회사의 직위 설명 아래에 제시된 프로그램 문제입니다. 원제는 다음과 같습니다.
[정수 숫자 읽기] string num2 Voice (int num) {...} 예: 입력: 12345 출력: 1만 2천 345 (시간 20min 이내에 코드를 완성하고 연결할 수 있음)
이 프로그램 문제는 개인적인 느낌으로는 좀 어려울 것 같습니다. 다음은 가능한 실현 방법을 보여 드리겠습니다. 참고만 하고 프로그램에서 고려가 미비한 부분이 있을 수 있으니 지적해 주시기 바랍니다.
String num2Voice(int num) {
        if (num == 0) {
            return " ";
        }

        String[] voiceTbl1 = new String[] {
                " ", " ", " ", " ", " ", " ", " ", " ", " ", " "
        };

        String[] voiceTbl2 = new String[] {
                " ", " ", " ", " ", " "
        };

        int loopCount = 0;
        String voice = "";
        boolean isNegative = false;
        if (num < 0) {
            isNegative = true;
            num = -num;
        }

        while (num != 0) {
            int mod = num % 10000;
            num = num / 10000;
            if (mod != 0) {
                int d1 = mod % 10;
                int d2 = mod % 100 / 10;
                int d3 = mod % 1000 / 100;
                int d4 = mod / 1000;
                String tmp = "";
                if (d4 != 0) {
                    tmp += voiceTbl1[d4] + voiceTbl2[2]/* */;
                } else {
                    //   4         0 ,    0   0,  10101
                    if (num != 0 && d3 != 0) {
                        tmp += voiceTbl1[0]/* */;
                    }
                }

                if (d3 != 0) {
                    tmp += voiceTbl1[d3] + voiceTbl2[1]/* */;
                } else {
                    //   4         0          0   ,
                    //     0     0,  10001, 3010
                    if ((d4 != 0 || num != 0) && (d2 != 0 || d1 != 0)) {
                        tmp += voiceTbl1[0]/* */;
                    }
                }

                if (d2 != 0) {
                    tmp += voiceTbl1[d2] + voiceTbl2[0]/* */;
                } else {
                    //      0        0 ,    0     0,  302
                    if (d3 != 0 && d1 != 0) {
                        tmp += voiceTbl1[0]/* */;
                    }
                }

                if (d1 != 0) {
                    tmp += voiceTbl1[d1];
                }
                voice = tmp + voice;
            }

            loopCount++;
            if (num != 0) {
                if (loopCount == 1) {
                    //       “   ”    
                    if (mod == 0 && num >= 10000 && num % 10000 == 0) {
                        continue;
                    }
                    voice = voiceTbl2[3]/* */ + voice;
                } else if (loopCount == 2) {
                    voice = voiceTbl2[4]/* */ + voice;
                }
            }
        }

        if(isNegative) {
            voice = " " + voice;
        }
        return voice;
    }

좋은 웹페이지 즐겨찾기