본문 바로가기

프로그래밍 언어/Java

[수치계산] 근접한 정수 구하기

근접한 정수 구하기




<입력>

N (0이면 종료)



<출력>


1)   1부터 k까지의 합 중 입력값 N에 가장 근접하는 k 출력



2) k! 가 N에 가장 근접하는 k 출력



3)  이 N에 가장 근접하는 값 m과 k 출력






<코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.util.Scanner;
 
public class CloseIntegerMain {
    public static void main(String[] args) {
        CloseIntegerMain integer = new CloseIntegerMain();
        integer.doit();
    }
    void doit() {
        Scanner scan = new Scanner(System.in);
        Process process = null;
        while(true) {
            process = new Process();
            process.input(scan);
            if (process.N == 0 ) break;
            process.square();
            process.print(process.sigma(), process.factorial());
        }
    }
}
 
class Process {
    int N = 0;
    int sum = 0;
    int mul = 1;
    int m = 0, k = 0, square = 1;
    
    /** 입력 */
    void input(Scanner scan) {
        System.out.print("값을 넣으세요 : ");
        N = scan.nextInt();
    }
    /** 시그마 */
    int sigma() {
        int i = 1;
        for(i = 1; sum + i < N; i++) { sum += i; }
        return --i;
    }
    /** 팩토리얼 */
    int factorial() {
        int i = 1;
        for (i = 1; mul  * i < N; i++) { mul *= i; }
        return --i;
    }
    /** 제곱 */
    void square() {
        double tmp;
        int j = 1;
        for (int i = 2; i * i < N; i++) {
            tmp = 1;
            for (j = 1; tmp * i < N; j++) { tmp *= i; }
            if (tmp > square) {
                m = i; k = --j; square = (int)tmp;
            }
        }
    }
    /** 출력 */
    void print(int sigma, int factorial) {
        System.out.printf("Sigma_%-5d\t=%4d\n", sigma, sum);
        System.out.printf("%d!\t\t=%4d\n", factorial, mul);
        System.out.printf("%d**%d\t\t=%4d\n", m, k, square);
    }
}
cs




<실행결과>