回答編集履歴

1

a

2020/01/08 15:48

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -1,5 +1,103 @@
1
- [36進数まのサンプル](https://www.atmarkit.co.jp/fdotnet/dotnettips/965radixconvert/radixconvert.html)を参考に頑張ってください
1
+ こういうことすかね
2
2
 
3
3
 
4
4
 
5
+ ```csharp
6
+
7
+ using System;
8
+
9
+ using System.Collections.Generic;
10
+
11
+ using System.Linq;
12
+
13
+
14
+
15
+
16
+
17
+ class Program
18
+
19
+ {
20
+
21
+ public static void Main()
22
+
23
+ {
24
+
25
+ Console.WriteLine((new ConvertHelper()).ToString(192));
26
+
27
+ Console.WriteLine((new ConvertHelper()).ToLong("25"));
28
+
29
+ }
30
+
31
+ }
32
+
33
+ internal class ConvertHelper
34
+
35
+ {
36
+
37
+ private readonly string Chars;
38
+
39
+ private readonly int Stem;
40
+
41
+ public ConvertHelper(int stem, string chars)
42
+
43
+ {
44
+
45
+ if(stem < 1) throw new ArgumentOutOfRangeException();
46
+
47
+ if (chars.Length != (new HashSet<char>(chars)).Count) throw new ArgumentOutOfRangeException();
48
+
49
+ Chars = chars;
50
+
51
+ Stem = stem;
52
+
53
+ }
54
+
55
+
56
+
57
+ public ConvertHelper(int stem, IEnumerable<char> chars) : this(stem, string.Join(string.Empty, chars))
58
+
59
+ {
60
+
61
+ }
62
+
63
+ public ConvertHelper() : this(95, @"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!""#$%&'()*+,-./:;<=>?@[]^_`{|}~ ") { }
64
+
65
+
66
+
67
+
68
+
69
+ public string ToString(long number) => string.Join(string.Empty, NextDigit(number).Reverse());
70
+
71
+ public string ToString(int number) => ToString((long)number);
72
+
73
+ private IEnumerable<char> NextDigit(long number)
74
+
75
+ {
76
+
77
+ while (number > 0)
78
+
79
+ {
80
+
81
+ yield return Chars[(int)(number % Stem)];
82
+
83
+ number /= Stem;
84
+
85
+ }
86
+
87
+ }
88
+
5
- ただの興味なんですけど、37番目以後はどういう文字をつかうのですか?
89
+ public long ToLong(string express)
90
+
91
+ {
92
+
93
+ return (long)express.Reverse().Select((c,i) => (long)Chars.IndexOf(c) * Math.Pow(Stem, i)).Sum();
94
+
95
+ }
96
+
97
+ }
98
+
99
+ ```
100
+
101
+
102
+
103
+ [36進数までのサンプル](https://www.atmarkit.co.jp/fdotnet/dotnettips/965radixconvert/radixconvert.html)を参考に頑張ってください。