回答編集履歴

8

コメント追加

2017/06/09 00:52

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -282,6 +282,8 @@
282
282
 
283
283
  //まぁImmutableにしたかった
284
284
 
285
+ //ついでに言うなら提示された範囲の中でしか約分できない
286
+
285
287
  public Fraction Reduction()
286
288
 
287
289
  {

7

コメント修正

2017/06/09 00:52

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -236,7 +236,7 @@
236
236
 
237
237
 
238
238
 
239
- //尚、範囲チェックはしてない模様(故、数が来ると宇宙の法則が乱れる)
239
+ //尚、範囲チェックはしてない模様(故、0以下の数が来ると宇宙の法則が乱れる)
240
240
 
241
241
  public Fraction(int numerator, int denominator)
242
242
 

6

コメント追加

2017/06/09 00:16

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -260,6 +260,8 @@
260
260
 
261
261
  //演算子のオーバーロードして、ホントに分数同士を足せるようにした
262
262
 
263
+ //Nullは来ない。良いね?
264
+
263
265
  public static Fraction operator +(Fraction x, Fraction y)
264
266
 
265
267
  {

5

コメント追加

2017/06/08 15:48

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -224,6 +224,8 @@
224
224
 
225
225
  //値型にしなよ~と言う意見は重々承知してるけど、0/0を避けたかったの。
226
226
 
227
+ //けどNullに成る病にかかった模様
228
+
227
229
  class Fraction
228
230
 
229
231
  {
@@ -316,7 +318,7 @@
316
318
 
317
319
 
318
320
 
319
- //異論は有るでしょーが仕様(約分・通分して表示)にあわせた
321
+ //異論は有るでしょーがまぁ仕様にあわせた
320
322
 
321
323
  public override string ToString()
322
324
 
@@ -366,12 +368,16 @@
366
368
 
367
369
 
368
370
 
371
+ //とはいえやっぱりLINQはどこかで使いたいw
372
+
369
373
  var hoge = from _ in Enumerable.Range(0, 10)
370
374
 
371
375
  let x = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
372
376
 
373
377
  let y = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
374
378
 
379
+ //ココで+を使いたかった。
380
+
375
381
  let result = x + y
376
382
 
377
383
  select result.ToString();
@@ -400,6 +406,8 @@
400
406
 
401
407
 
402
408
 
409
+
410
+
403
411
  ```
404
412
 
405
413
 

4

コメント追加

2017/06/08 15:47

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -316,7 +316,7 @@
316
316
 
317
317
 
318
318
 
319
- //異論は有るでしょーがまぁ仕様にあわせた
319
+ //異論は有るでしょーが仕様(約分・通分して表示)にあわせた
320
320
 
321
321
  public override string ToString()
322
322
 

3

コメント追加

2017/06/08 15:45

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -234,6 +234,8 @@
234
234
 
235
235
 
236
236
 
237
+ //尚、範囲チェックはしてない模様(故、負数が来ると宇宙の法則が乱れる)
238
+
237
239
  public Fraction(int numerator, int denominator)
238
240
 
239
241
  {
@@ -254,6 +256,8 @@
254
256
 
255
257
 
256
258
 
259
+ //演算子のオーバーロードして、ホントに分数同士を足せるようにした
260
+
257
261
  public static Fraction operator +(Fraction x, Fraction y)
258
262
 
259
263
  {
@@ -270,6 +274,8 @@
270
274
 
271
275
 
272
276
 
277
+ //約分した分数を返す
278
+
273
279
  //まぁImmutableにしたかった
274
280
 
275
281
  public Fraction Reduction()
@@ -350,10 +356,6 @@
350
356
 
351
357
  {
352
358
 
353
- private static readonly int[] PrimeNumbers = { 5, 3, 2 };
354
-
355
-
356
-
357
359
  static void Main()
358
360
 
359
361
  {

2

LINQを使いたかったw

2017/06/08 15:41

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -197,3 +197,213 @@
197
197
 
198
198
 
199
199
  ```
200
+
201
+
202
+
203
+ ---
204
+
205
+
206
+
207
+ こっから先はお戯れなので、まぁこーいう風にも書けるのかー程度に
208
+
209
+ ```csharp
210
+
211
+
212
+
213
+
214
+
215
+ using System;
216
+
217
+ using System.Linq;
218
+
219
+
220
+
221
+ namespace ConsoleApp1
222
+
223
+ {
224
+
225
+ //値型にしなよ~と言う意見は重々承知してるけど、0/0を避けたかったの。
226
+
227
+ class Fraction
228
+
229
+ {
230
+
231
+
232
+
233
+ private static readonly int[] PrimeNumbers = { 5, 3, 2 };
234
+
235
+
236
+
237
+ public Fraction(int numerator, int denominator)
238
+
239
+ {
240
+
241
+ Numerator = numerator;
242
+
243
+ Denominator = denominator;
244
+
245
+ }
246
+
247
+
248
+
249
+ //イマドキなら逆にreadonly付けてpublicフィールドでも良いかもね?
250
+
251
+ public int Numerator { get; }
252
+
253
+ public int Denominator { get; }
254
+
255
+
256
+
257
+ public static Fraction operator +(Fraction x, Fraction y)
258
+
259
+ {
260
+
261
+ var denominator = x.Denominator * y.Denominator;
262
+
263
+ var numerator = x.Numerator * y.Denominator + x.Denominator * y.Numerator;
264
+
265
+
266
+
267
+ return new Fraction(numerator, denominator);
268
+
269
+ }
270
+
271
+
272
+
273
+ //まぁImmutableにしたかった
274
+
275
+ public Fraction Reduction()
276
+
277
+ {
278
+
279
+ var d = Denominator;
280
+
281
+ var n = Numerator;
282
+
283
+
284
+
285
+ //アライさん無理にLINQ使うのはやめなよ
286
+
287
+ foreach (var p in PrimeNumbers)
288
+
289
+ {
290
+
291
+ if (d % p == 0 && n % p == 0)
292
+
293
+ {
294
+
295
+ d /= p;
296
+
297
+ n /= p;
298
+
299
+ }
300
+
301
+ }
302
+
303
+
304
+
305
+ return new Fraction(n, d);
306
+
307
+ }
308
+
309
+
310
+
311
+
312
+
313
+ //異論は有るでしょーがまぁ仕様にあわせた
314
+
315
+ public override string ToString()
316
+
317
+ {
318
+
319
+ var tmp = Reduction();
320
+
321
+
322
+
323
+ var integer = tmp.Numerator / tmp.Denominator;
324
+
325
+
326
+
327
+ if (tmp.Numerator % tmp.Denominator == 0) return integer.ToString();
328
+
329
+
330
+
331
+ if (integer >= 1)
332
+
333
+ {
334
+
335
+ return $"{integer}.{tmp.Numerator % tmp.Denominator}/{tmp.Denominator}";
336
+
337
+ }
338
+
339
+
340
+
341
+ return $"{tmp.Numerator}/{tmp.Denominator}";
342
+
343
+ }
344
+
345
+ }
346
+
347
+
348
+
349
+ class Program
350
+
351
+ {
352
+
353
+ private static readonly int[] PrimeNumbers = { 5, 3, 2 };
354
+
355
+
356
+
357
+ static void Main()
358
+
359
+ {
360
+
361
+ //乱数
362
+
363
+ Random rnd = new Random(42);
364
+
365
+
366
+
367
+ var hoge = from _ in Enumerable.Range(0, 10)
368
+
369
+ let x = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
370
+
371
+ let y = new Fraction(rnd.Next(2, 11), rnd.Next(2, 11))
372
+
373
+ let result = x + y
374
+
375
+ select result.ToString();
376
+
377
+
378
+
379
+ foreach (var s in hoge)
380
+
381
+ {
382
+
383
+ Console.WriteLine(s);
384
+
385
+ }
386
+
387
+ }
388
+
389
+
390
+
391
+
392
+
393
+ }
394
+
395
+ }
396
+
397
+
398
+
399
+
400
+
401
+ ```
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+

1

コメント追加

2017/06/08 15:36

投稿

Tokeiya3
Tokeiya3

スコア260

test CHANGED
@@ -11,6 +11,8 @@
11
11
  namespace ConsoleApp1
12
12
 
13
13
  {
14
+
15
+ //分数を表現する構造体
14
16
 
15
17
  struct Fraction
16
18
 
@@ -40,7 +42,11 @@
40
42
 
41
43
  {
42
44
 
45
+ //約分するときに使う素数(尚、数えてもあんまり意味は無い)
46
+
43
47
  private static int[] PrimeNumbers = {5, 3, 2};
48
+
49
+
44
50
 
45
51
  static void Main()
46
52
 
@@ -188,4 +194,6 @@
188
194
 
189
195
 
190
196
 
197
+
198
+
191
199
  ```