回答編集履歴
8
コメント追加
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
コメント修正
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
コメント追加
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
コメント追加
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
コメント追加
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
コメント追加
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
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
コメント追加
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
|
```
|