728x90
반응형
WPF & C# - 진수 진법변환 5가지 방법(Base Converter) / Convert / ToInt32 / 2진수 / 10진수 / 16진수 / n진수 / StringBuilder ) |
관련링크
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 < 2) return "값은 양수만 가능 && 2진수이상만 가능합니다."; if (j == 1) return 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 < 1) return "값은 양수만 가능 && 2진수이상만 가능합니다."; if (j == 1) return 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 < 1) return stb.Append("값은 양수만 가능 && 2진수이상만 가능합니다."); if (j == 1) return 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 < 2) return 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 < 2) return val; while (n >= j) { val.Insert(0, (n % j).ToString()); // 나머지 값을 앞에 추가 n = n / j; } val.Insert(0, n.ToString()); // 나눌게 없다면 ? 몫 return val; } | cs |
내가 아는 방법대로 풀어 보았다.
728x90
반응형