質問するログイン新規登録

回答編集履歴

8

コメント追加

2017/06/09 00:52

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -140,6 +140,7 @@
140
140
 
141
141
  //約分した分数を返す
142
142
  //まぁImmutableにしたかった
143
+ //ついでに言うなら提示された範囲の中でしか約分できない
143
144
  public Fraction Reduction()
144
145
  {
145
146
  var d = Denominator;

7

コメント修正

2017/06/09 00:52

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -117,7 +117,7 @@
117
117
 
118
118
  private static readonly int[] PrimeNumbers = { 5, 3, 2 };
119
119
 
120
- //尚、範囲チェックはしてない模様(故、数が来ると宇宙の法則が乱れる)
120
+ //尚、範囲チェックはしてない模様(故、0以下の数が来ると宇宙の法則が乱れる)
121
121
  public Fraction(int numerator, int denominator)
122
122
  {
123
123
  Numerator = numerator;

6

コメント追加

2017/06/09 00:16

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -129,6 +129,7 @@
129
129
  public int Denominator { get; }
130
130
 
131
131
  //演算子のオーバーロードして、ホントに分数同士を足せるようにした
132
+ //Nullは来ない。良いね?
132
133
  public static Fraction operator +(Fraction x, Fraction y)
133
134
  {
134
135
  var denominator = x.Denominator * y.Denominator;

5

コメント追加

2017/06/08 15:48

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -111,6 +111,7 @@
111
111
  namespace ConsoleApp1
112
112
  {
113
113
  //値型にしなよ~と言う意見は重々承知してるけど、0/0を避けたかったの。
114
+ //けどNullに成る病にかかった模様
114
115
  class Fraction
115
116
  {
116
117
 
@@ -157,7 +158,7 @@
157
158
  }
158
159
 
159
160
 
160
- //異論は有るでしょーが仕様(約分・通分して表示)にあわせた
161
+ //異論は有るでしょーがまぁ仕様にあわせた
161
162
  public override string ToString()
162
163
  {
163
164
  var tmp = Reduction();
@@ -182,9 +183,11 @@
182
183
  //乱数
183
184
  Random rnd = new Random(42);
184
185
 
186
+ //とはいえやっぱりLINQはどこかで使いたいw
185
187
  var hoge = from _ in Enumerable.Range(0, 10)
186
188
  let x = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
187
189
  let y = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
190
+ //ココで+を使いたかった。
188
191
  let result = x + y
189
192
  select result.ToString();
190
193
 
@@ -199,6 +202,7 @@
199
202
  }
200
203
 
201
204
 
205
+
202
206
  ```
203
207
 
204
208
 

4

コメント追加

2017/06/08 15:47

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -157,7 +157,7 @@
157
157
  }
158
158
 
159
159
 
160
- //異論は有るでしょーがまぁ仕様にあわせた
160
+ //異論は有るでしょーが仕様(約分・通分して表示)にあわせた
161
161
  public override string ToString()
162
162
  {
163
163
  var tmp = Reduction();

3

コメント追加

2017/06/08 15:45

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -116,6 +116,7 @@
116
116
 
117
117
  private static readonly int[] PrimeNumbers = { 5, 3, 2 };
118
118
 
119
+ //尚、範囲チェックはしてない模様(故、負数が来ると宇宙の法則が乱れる)
119
120
  public Fraction(int numerator, int denominator)
120
121
  {
121
122
  Numerator = numerator;
@@ -126,6 +127,7 @@
126
127
  public int Numerator { get; }
127
128
  public int Denominator { get; }
128
129
 
130
+ //演算子のオーバーロードして、ホントに分数同士を足せるようにした
129
131
  public static Fraction operator +(Fraction x, Fraction y)
130
132
  {
131
133
  var denominator = x.Denominator * y.Denominator;
@@ -134,6 +136,7 @@
134
136
  return new Fraction(numerator, denominator);
135
137
  }
136
138
 
139
+ //約分した分数を返す
137
140
  //まぁImmutableにしたかった
138
141
  public Fraction Reduction()
139
142
  {
@@ -174,8 +177,6 @@
174
177
 
175
178
  class Program
176
179
  {
177
- private static readonly int[] PrimeNumbers = { 5, 3, 2 };
178
-
179
180
  static void Main()
180
181
  {
181
182
  //乱数

2

LINQを使いたかったw

2017/06/08 15:41

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -97,4 +97,108 @@
97
97
 
98
98
 
99
99
 
100
- ```
100
+ ```
101
+
102
+ ---
103
+
104
+ こっから先はお戯れなので、まぁこーいう風にも書けるのかー程度に
105
+ ```csharp
106
+
107
+
108
+ using System;
109
+ using System.Linq;
110
+
111
+ namespace ConsoleApp1
112
+ {
113
+ //値型にしなよ~と言う意見は重々承知してるけど、0/0を避けたかったの。
114
+ class Fraction
115
+ {
116
+
117
+ private static readonly int[] PrimeNumbers = { 5, 3, 2 };
118
+
119
+ public Fraction(int numerator, int denominator)
120
+ {
121
+ Numerator = numerator;
122
+ Denominator = denominator;
123
+ }
124
+
125
+ //イマドキなら逆にreadonly付けてpublicフィールドでも良いかもね?
126
+ public int Numerator { get; }
127
+ public int Denominator { get; }
128
+
129
+ public static Fraction operator +(Fraction x, Fraction y)
130
+ {
131
+ var denominator = x.Denominator * y.Denominator;
132
+ var numerator = x.Numerator * y.Denominator + x.Denominator * y.Numerator;
133
+
134
+ return new Fraction(numerator, denominator);
135
+ }
136
+
137
+ //まぁImmutableにしたかった
138
+ public Fraction Reduction()
139
+ {
140
+ var d = Denominator;
141
+ var n = Numerator;
142
+
143
+ //アライさん無理にLINQ使うのはやめなよ
144
+ foreach (var p in PrimeNumbers)
145
+ {
146
+ if (d % p == 0 && n % p == 0)
147
+ {
148
+ d /= p;
149
+ n /= p;
150
+ }
151
+ }
152
+
153
+ return new Fraction(n, d);
154
+ }
155
+
156
+
157
+ //異論は有るでしょーがまぁ仕様にあわせた
158
+ public override string ToString()
159
+ {
160
+ var tmp = Reduction();
161
+
162
+ var integer = tmp.Numerator / tmp.Denominator;
163
+
164
+ if (tmp.Numerator % tmp.Denominator == 0) return integer.ToString();
165
+
166
+ if (integer >= 1)
167
+ {
168
+ return $"{integer}.{tmp.Numerator % tmp.Denominator}/{tmp.Denominator}";
169
+ }
170
+
171
+ return $"{tmp.Numerator}/{tmp.Denominator}";
172
+ }
173
+ }
174
+
175
+ class Program
176
+ {
177
+ private static readonly int[] PrimeNumbers = { 5, 3, 2 };
178
+
179
+ static void Main()
180
+ {
181
+ //乱数
182
+ Random rnd = new Random(42);
183
+
184
+ var hoge = from _ in Enumerable.Range(0, 10)
185
+ let x = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
186
+ let y = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
187
+ let result = x + y
188
+ select result.ToString();
189
+
190
+ foreach (var s in hoge)
191
+ {
192
+ Console.WriteLine(s);
193
+ }
194
+ }
195
+
196
+
197
+ }
198
+ }
199
+
200
+
201
+ ```
202
+
203
+
204
+

1

コメント追加

2017/06/08 15:36

投稿

Tokeiya3
Tokeiya3

スコア260

answer CHANGED
@@ -5,6 +5,7 @@
5
5
 
6
6
  namespace ConsoleApp1
7
7
  {
8
+ //分数を表現する構造体
8
9
  struct Fraction
9
10
  {
10
11
  public Fraction(int numerator, int denominator)
@@ -19,7 +20,9 @@
19
20
 
20
21
  class Program
21
22
  {
23
+ //約分するときに使う素数(尚、数えてもあんまり意味は無い)
22
24
  private static int[] PrimeNumbers = {5, 3, 2};
25
+
23
26
  static void Main()
24
27
  {
25
28
  //乱数
@@ -93,4 +96,5 @@
93
96
  }
94
97
 
95
98
 
99
+
96
100
  ```