본문 바로가기

Programing (프로그래밍)/WPF & C# (C Sharp)

WPF & C# - 진수 진법변환 5가지 방법(Base Converter) / Convert / ToInt32 / 2진수 / 10진수 / 16진수 / n진수 / StringBuilder )

728x90
반응형


 WPF & C# - 진수 진법변환 5가지 방법(Base Converter) / Convert / ToInt32 / 2진수 / 10진수 / 16진수 / n진수 / StringBuilder )



관련링크



ConvertJ.zip


MainWindow.xaml.cs



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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
private void btn_Click(object sender, RoutedEventArgs e)
{
    // 10진수를 X진법으로 나타내기
    int n = 1329;  // 값(10진수)
    int j = 8;   // 진법
 
    string str0 = "";
    string str = ConvertJ(n, j);
    string str1 = ConvertJ1(n, j);
    StringBuilder str1_1 = ConvertJ1_1(n, j);
    string[] str2 = ConvertJ2(n, j).ToArray();
    string[] str3 = ConvertJ3(n, j).ToArray();
 
    MessageBox.Show(
        str0 + "\n" +
        str + "\n" +
        str1 + "\n" +
        str1_1 + "\n" +
        string.Join("", str2) + "\n" +
        string.Join("", str3));
}
 
// 진수변환
// 10진수(n) int를 문자열 X진법으(j)로 나타내기 (3진수, 4진수, 5진수... / 3진법, 4진법, 5진법... )
// int n = 10진수 입력값, int j = 진법, string val = 리턴값
// 재귀함수사용
private string ConvertJ(int n, int j, string str = "")
{
    if (n <= 0 || j < 2return "값은 양수만 가능 && 2진수이상만 가능합니다.";
    if (j == 1return n.ToString();
 
    int k = n / j;   // 몫
    str = (n % j).ToString() + str;   // 나머지를 뒤로 이동
 
    if (k >= j) return ConvertJ(k, j, str);   // 나눌게 있다면? 재귀함수 return
    else str = k.ToString() + str;   // 나눌게 없다면 ? 몫
    return str;
}
 
// while 문 사용
private string ConvertJ1(int n, int j, string str = "")
{
    if (n <= 0 || j < 1return "값은 양수만 가능 && 2진수이상만 가능합니다.";
    if (j == 1return n.ToString();
 
    while (n >= j)
    {
        str = (n % j).ToString() + str;   // 나머지를 뒤로 이동
        n = n / j;   // 몫
    }
    str = n.ToString() + str;   // 나눌게 없다면 ? 몫
    return str;
}
 
// while & StringBuilder 사용
private StringBuilder ConvertJ1_1(int n, int j, StringBuilder stb = null)
{
    if (stb == null) stb = new StringBuilder();
    if (n <= 0 || j < 1return stb.Append("값은 양수만 가능 && 2진수이상만 가능합니다.");
    if (j == 1return stb.Append(n.ToString());
 
    while (n >= j)
    {
        stb.Insert(0, (n % j).ToString());
        n = n / j;   // 몫
    }
    stb.Insert(0, n.ToString());
    return stb;
}
 
// List<string> & 재귀함수사용
private List<string> ConvertJ2(int n, int j, List<string> val = null)
{
    if (val == null) val = new List<string>();
    //            if (j == 1) return n.ToString().ToList();   // 어떻게하지? ㅠㅠ
    if (j < 2return val;
 
    int k = n / j;
    val.Insert(0, (n % j).ToString());   // 나머지 값을 앞에 추가
 
    if (k >= j) return ConvertJ2(k, j, val);   // 나눌게 있다면? 재귀함수 return
    else val.Insert(0, k.ToString());   // 나눌게 없다면 ? 몫
    return val;
}
 
// List<string> & while 문사용
private List<string> ConvertJ3(int n, int j, List<string> val = null)
{
    // val 초기화
    if (val == null) val = new List<string>();
 
//            if (j == 1) return n.ToString().ToList();   // 어떻게하지? ㅠㅠ
    if (j < 2return val;
 
    while (n >= j)
    {
        val.Insert(0, (n % j).ToString());   // 나머지 값을 앞에 추가
        n = n / j;
    }
    val.Insert(0, n.ToString());   // 나눌게 없다면 ? 몫
    return val;
}
cs


내가 아는 방법대로 풀어 보았다.



728x90
반응형